wxpython事件顺序
我有一个带网格的wxPython gui。当用户单击某些单元格时,将弹出一个下拉菜单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的默认行为首先发生,然后触发我的自定义方法。通常,当您单击网
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