Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wxpython事件顺序_Python_Grid_Wxpython_Wxgrid - Fatal编程技术网

wxpython事件顺序

wxpython事件顺序,python,grid,wxpython,wxgrid,Python,Grid,Wxpython,Wxgrid,我有一个带网格的wxPython gui。当用户单击某些单元格时,将弹出一个下拉菜单 self.window.Bind(wx.grid.EVT_GRID_SELECT_CELL, lambda event: self.on_left_click(event, self.grid, choices), self.grid) 单击鼠标左键的方法会弹出下拉菜单并按预期工作。问题是我希望wx.grid.EVT_grid_SELECT_CELL的默认行为首先发生,然后触发我的自定义方法。通常,当您单击网

我有一个带网格的wxPython gui。当用户单击某些单元格时,将弹出一个下拉菜单

self.window.Bind(wx.grid.EVT_GRID_SELECT_CELL, lambda event: self.on_left_click(event, self.grid, choices), self.grid)
单击鼠标左键的方法会弹出下拉菜单并按预期工作。问题是我希望wx.grid.EVT_grid_SELECT_CELL的默认行为首先发生,然后触发我的自定义方法。通常,当您单击网格单元时,该单元的边框会变粗。使用“我的绑定”时,首先会显示“我的”下拉菜单,只有当下拉菜单关闭后,才会选择单元格边框。我尝试调用self.grid.SetGridCursorrow,col,但这会生成一个wx.grid.EVT_grid_SELECT_CELL事件,这会导致递归最大输出,显然是不好的。我还尝试在左键单击代码中使用event.Skip,但似乎没有效果

以下是我刚才单击第0行第2列时出现的尴尬、令人反感的行为:

以下是所需的行为:

如果需要,我很乐意提供更多的代码。我想做下面的一件事。第一,在转到我的自定义下拉菜单之前,以某种方式强制wxPython完全处理wx.grid.EVT_grid_SELECT_CELL。第二,在我自己的代码中手动复制高亮显示选定单元格的效果

提前感谢您的帮助

编辑:

这就是我最后做的

我使用了wx.grid.EVT_grid_CELL_LEFT_CLICK来代替wx.grid.EVT_grid_CELL_SELECT_CELL,这实际上是用户单击网格单元格时触发的第一个事件,因此我可以完全自定义初始单击后的行为。然后,我可以用这个:

    self.grid.SetGridCursor(row, col)

在不产生无限递归错误的情况下勾勒出单元格的轮廓,并实现一系列其他行为,这些行为现在工作得更加顺利。我还需要使用self.grid.Refresh。

创建一个单独的方法来显示下拉菜单,并使用wx.CallAfter调用它

def on_left_click(self, event, grid, choices):
    event.Skip()
    self.grid.Refresh()
    wx.CallAfter(self.showMenu, grid=grid, choices=choices)


def showMenu(self, grid=None, choices=None):
    # Drop down menu code goes here