Python wx.lib.EVT_颜色选择干扰wx.lib.FloatCanvas.EVT_鼠标滚轮 问题是:
似乎一个事件正在禁用另一个事件。在调用事件B之前,事件A工作正常。事件B触发后,事件A不再工作。这两个事件都是人们为其wxPython库(FloatCanvas和colorSelect)定制的事件。我希望跟踪生成的事件,以确保在事件B之后,事件A仍然被触发(但可能没有触发处理程序代码?) 详情如下: 我有一个wxPython应用程序,我在其中创建了一个Python wx.lib.EVT_颜色选择干扰wx.lib.FloatCanvas.EVT_鼠标滚轮 问题是:,python,wxpython,Python,Wxpython,似乎一个事件正在禁用另一个事件。在调用事件B之前,事件A工作正常。事件B触发后,事件A不再工作。这两个事件都是人们为其wxPython库(FloatCanvas和colorSelect)定制的事件。我希望跟踪生成的事件,以确保在事件B之后,事件A仍然被触发(但可能没有触发处理程序代码?) 详情如下: 我有一个wxPython应用程序,我在其中创建了一个wx.Panel对象,其中包含两个子项—一个绘图和一个图例。此顶级面板处理大多数事件 绘图是一个wx.Panel对象,其中有一个wx.lib.F
wx.Panel
对象,其中包含两个子项—一个绘图和一个图例。此顶级面板处理大多数事件
- 绘图是一个
对象,其中有一个wx.Panel
画布wx.lib.FloatCanvas.FloatCanvas
- 图例是一个
,其中包含多个wx.Panel
和wx.StaticText
对象(我正在绘制离散数据点)wx.lib.colorselect.colorselect
FloatCanvas.EVT_mouseweel
绑定到我的放大/缩小功能。在图例上,我将wx.lib.colorselect.EVT\u colorselect
事件绑定到我的update\u colors函数,然后该函数通过wx.PostEvent(event)
将事件发送到父面板
然后,父面板从子面板接收EVT\u colorselect
,并执行更改绘图颜色的代码
源代码:
我还没来得及编写一个小示例来说明演示的问题,但您可以通过运行源代码来查看问题:
运行wm_app.py文件,然后执行以下测试步骤
测试步骤:
EVT\u colorselect
)。如果要使用源代码进行测试,请单击图例颜色框并选择新颜色- 解除鼠标滚轮事件的绑定,并在顶级面板收到来自子级的事件时重新绑定
- 完全禁用父面板和图例中的
处理程序EVT\u colorselect
- 我想也许我的经纪人有什么问题。结果,只是
触发
会导致EVT\u colorselect
停止工作EVT\u鼠标滚轮
- 我想也许我的经纪人有什么问题。结果,只是
触发
- 将
FloatCanvas.EVT\u鼠标滚轮更改为其他事件,例如
FloatCanvas.EVT\u RIGHT\u DOWN
- 这确实有效!我松开了鼠标滚轮上的“速度”信息,但右键单击 在第2步之前和之后,这两种方法都有效
- 似乎表明这是鼠标滚动事件的问题
有人遇到过事件相互干扰的问题吗?事实证明,事件之间没有任何干扰,至少我提到的事件没有 在做了大量的修改和尝试后,我找到了问题的根源。遗憾的是,我没有找到解决办法 问题是: 我的绘图wx.Panel已绑定
wx.MOUSE\u LEFT\u DOWN
。这似乎阻止了父wx.Frame窗口将焦点放在保存绘图和图例的面板上
解决方案:
我删除了对wx.EVT\u LEFT\u的绑定,这似乎解决了根本问题。但是,这仍然不是理想情况,因为它会导致另外两个问题:
我不能再在绘图上使用鼠标左键。我想这没什么大不了的,因为我总能绑住鼠标
在鼠标滚动或任何键盘快捷键工作之前,用户必须首先左键单击绘图区域以使其具有焦点。这不一定源于没有绑定wx.EVT\u LEFT\u
,而是(我相信)源于Windows所做的一些事情。有关更多信息,请参阅
失败的解决方法:
我尝试了一种解决方法:添加代码,将wx.EVT_LEFT_DOWN事件发送到父级,但这仍然不起作用,或者是我做错了。以下是我尝试的左键单击事件处理程序:
def left_click(self, event):
print("left click!")
parent = wx.GetTopLevelParent()
wx.PostEvent(self.parent, event)
不管怎样,这个问题已经解决了。希望我这里的内容能帮助其他人解决问题。您能展示一下您的事件处理程序吗?或者最好是一个显示问题的自包含示例。我现在没有时间编写一个显示问题的示例,但是您可以在上查看项目的源代码。运行wm_app.py,然后运行上面列出的测试步骤。我对它们进行了编辑,使其更具描述性。