【发布时间】:2015-02-09 08:51:31
【问题描述】:
问题:
似乎一个事件正在禁用另一个事件。在调用事件 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 并执行更改我的绘图颜色的代码。
源代码:
我还没来得及写一个demo的小例子,但是你可以通过运行源代码看到问题: 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- 这确实有效!我从鼠标滚轮上松开了“速度”信息,但右键单击 在第 2 步之前和之后都可以工作。
- 似乎表明这是鼠标滚动事件的问题。
有人遇到过事件相互干扰的问题吗?
【问题讨论】:
-
你能展示你的事件处理程序吗?或者更好的是显示问题的独立样本。
-
我现在没有时间编写显示问题的示例,但您可以在github.com/dougthor42/wafer_map 查看项目的源代码。运行 wm_app.py,然后运行上面列出的测试步骤。我对它们进行了编辑,使其更具描述性。