【发布时间】:2014-12-08 16:46:05
【问题描述】:
我有一个带有网格的 wxPython gui。当用户点击某些单元格时,会弹出一个下拉菜单。
self.window.Bind(wx.grid.EVT_GRID_SELECT_CELL, lambda event: self.on_left_click(event, self.grid, choices), self.grid)
on_left_click 方法拉出下拉菜单并按预期工作。问题是我希望 wx.grid.EVT_GRID_SELECT_CELL 的默认行为发生首先,然后我的自定义方法触发。通常,当您单击网格单元格时,该单元格的边框会变为粗体。使用我的绑定,我的下拉菜单首先出现,并且只有在关闭下拉菜单后才会选择单元格边框。我尝试调用 self.grid.SetGridCursor(row, col),但这会生成一个 wx.grid.EVT_GRID_SELECT_CELL 事件,这会导致递归最大输出,显然是不好的。我也尝试在 on_left_click 代码中使用 event.Skip() ,但似乎没有效果。
这是尴尬的、令人反感的行为(我刚刚点击了第 0 行,第 2 列):
这是所需的行为:
如果需要,我很乐意提供更多代码。我想做以下其中一项。一,在进入我的自定义下拉菜单之前,以某种方式强制 wxPython 完全处理 wx.grid.EVT_GRID_SELECT_CELL。二、在我自己的代码中手动复制“高亮”选中单元格的效果。
提前感谢您的帮助。
编辑:
这就是我最终做的事情。
我使用 wx.grid.EVT_GRID_CELL_LEFT_CLICK 代替 wx.grid.EVT_GRID_SELECT_CELL,它本质上是当用户单击网格单元时触发的 first 事件,因此我可以完全自定义初始点击后的行为。然后,我可以使用这个:
self.grid.SetGridCursor(row, col)
在不产生无限递归错误的情况下勾勒出单元格的轮廓,以及实现一系列现在工作更顺利的其他行为。我还需要使用 self.grid.Refresh()。
【问题讨论】:
标签: python grid wxpython wxgrid