似乎有一个事件正在禁用另一个事件。在调用事件B之前,事件A工作正常。事件B发生后,事件A不再起作用。这两个事件都是人们为他们的wxPython库(FloatCanvas和ColourSelect)制作的自定义事件。我想跟踪生成的事件,以确保在事件B之后,事件A仍然被触发(但可能没有触发处理程序代码?)
我有一个wxPython应用程序,我在其中创建一个带有两个子项的wx.Panel
对象 - 一个情节和一个图例。这个顶级面板处理大多数事件。
该图是一个wx.Panel
对象,其中包含一个wx.lib.FloatCanvas.FloatCanvas
画布。
图例是wx.Panel
,其中包含多个wx.StaticText
和wx.lib.colourselect.ColourSelect
个对象(我正在绘制离散数据点)。
在图中,我将FloatCanvas.EVT_MOUSEWHEEL
绑定到我的放大/缩小功能。在图例上,我将wx.lib.colourselect.EVT_COLOURSELECT
事件绑定到我的update_colors函数,然后通过wx.PostEvent(event)
将事件发送到父面板。
父母小组然后从孩子那里收到EVT_COLOURSELECT
并执行改变我的情节颜色的代码。
我没有时间编写一个示例问题的小样本,但您可以通过运行源代码来查看问题: https://github.com/dougthor42/wafer_map
运行wm_app.py文件,然后执行以下测试步骤。
EVT_COLOURSELECT
)。如果您使用源代码进行测试,请单击图例颜色框并选择新颜色。显然这些没有用,否则我不会在这里:-P
取消绑定鼠标滚轮事件,并在顶级面板收到来自孩子的事件时重新绑定它。
在父面板和图例中完全禁用EVT_COLOURSELECT
的处理程序。
EVT_COLOURSELECT
会导致EVT_MOUSEWHEEL
停止工作。将FloatCanvas.EVT_MOUSEWHEEL
更改为其他一些事件,例如FloatCanvas.EVT_RIGHT_DOWN
有没有人遇到事件相互干扰的问题?
答案 0 :(得分:0)
事实证明,事件没有任何干扰 - 至少不是我提到的事件。
经过大量的摆弄和尝试制作一个仍然表现出问题的裸机版本(我没有成功),我找出了根本原因。可悲的是,我没有找到解决方法。
我的情节wx.Panel是绑定wx.MOUSE_LEFT_DOWN
。这似乎阻止了父wx.Frame窗口将焦点放在持有情节和图例的Panel上。
我删除了绑定到wx.EVT_LEFT_DOWN
,这似乎解决了潜在的问题。但是,这仍然不是理想的情况,因为它会导致另外两个问题:
wx.EVT_LEFT_DOWN
,而是(我相信)来自Windows所做的事情。有关详细信息,请参阅Focus-follows-mouse in wxPython?。我尝试了一种解决方法:添加将wx.EVT_LEFT_DOWN事件发送给父级的代码但是仍然无效或者我做错了。这是我尝试过的左键单击事件处理程序:
def left_click(self, event):
print("left click!")
parent = wx.GetTopLevelParent()
wx.PostEvent(self.parent, event)
所以无论如何,这个问题有点解决了。希望我在这里得到的帮助别人。