wx.lib.EVT\u颜色选择干扰wx.lib.FloatCanvas.EVT\u鼠标滚轮

2024-09-28 05:19:33 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是:

似乎一个事件正在禁用另一个事件。在调用事件B之前,事件A可以正常工作。事件B触发后,事件A不再工作。这两个事件都是人们为wxPython库(FloatCanvas和colorselect)定制的。我想跟踪生成的事件,以确保在事件B之后,事件A仍然被触发(但可能没有触发处理程序代码?)你知道吗

详细信息:

我有一个wxPython应用程序,我在其中创建了一个wx.Panel对象,其中包含两个子项:一个plot和一个legend。这个顶级面板处理大多数事件。你知道吗

  • 绘图是一个wx.Panel对象,其中有一个wx.lib.FloatCanvas.FloatCanvas画布。

  • 图例是一个wx.Panel,其中包含多个wx.StaticTextwx.lib.colourselect.ColourSelect对象(我正在绘制离散数据点)。

在绘图时,我将FloatCanvas.EVT_MOUSEWHEEL绑定到放大/缩小函数。在图例中,我将wx.lib.colourselect.EVT_COLOURSELECT事件绑定到update\u colors函数,然后该函数通过wx.PostEvent(event)将事件发送到父面板。你知道吗

然后,父面板从子面板接收EVT_COLOURSELECT,并执行更改绘图颜色的代码。你知道吗

源代码:

我还没来得及编写一个小示例来说明问题所在,但您可以通过运行源代码来了解问题: https://github.com/dougthor42/wafer_map

运行wm_应用程序类型文件,然后执行以下测试步骤。你知道吗

测试步骤:

  1. 滚动/放大和缩小-工作正常
  2. 更改绘图颜色(激发EVT_COLOURSELECT)。如果使用源代码进行测试,可以通过单击图例颜色框并选择新颜色来完成。你知道吗
  3. 再次尝试放大和缩小。不起作用!
  4. 确认所有其他事件(按下键、单击并拖动、鼠标移动)都正常工作。你知道吗

我尝试过的事情:

显然这些都没用,否则我就不在这里了

  • 解除鼠标滚轮事件的绑定,并在顶级面板从子面板接收到事件时重新绑定它。

  • 在父面板和图例中完全禁用EVT_COLOURSELECT的处理程序。你知道吗

    • 我想也许我的掌柜里发生了什么事。结果,只是 触发EVT_COLOURSELECT会导致EVT_MOUSEWHEEL停止工作。你知道吗
  • FloatCanvas.EVT_MOUSEWHEEL更改为其他事件,例如FloatCanvas.EVT_RIGHT_DOWN

    • 这确实有效!我松开了鼠标滚轮上的“速度”信息,但右键单击 在第2步之前和之后都可以工作。你知道吗
    • 似乎表明这是鼠标滚动事件的问题。你知道吗

有人遇到过事件相互干扰的问题吗?你知道吗


Tags: 对象函数面板绘图颜色lib事件鼠标
1条回答
网友
1楼 · 发布于 2024-09-28 05:19:33

事实证明,没有任何干扰事件-至少没有我提到的事件。你知道吗

在做了大量的修改和尝试之后,我找到了问题的根源。遗憾的是,我没有找到解决办法。你知道吗

问题是:

我的阴谋wx.面板正在绑定wx.MOUSE_LEFT_DOWN。看来这阻止了父母wx.框架窗口,使焦点集中到保存绘图和图例的面板。你知道吗

解决方案:

我删除了对wx.EVT_LEFT_DOWN的绑定,这似乎解决了根本问题。然而,这仍然不是理想的情况,因为它会导致另外两个问题:

  1. 我再也不能用鼠标左键在绘图上了。我想没什么大不了的,因为我总是能绑住鼠标。你知道吗
  2. 在鼠标滚动或任何键盘快捷键工作之前,用户必须首先在绘图区域上单击鼠标左键以使其成为焦点。这不一定源于不绑定wx.EVT_LEFT_DOWN,而是(我相信)源于Windows所做的一些事情。更多信息请参见Focus-follows-mouse in wxPython?。你知道吗

失败的解决方法:

我尝试了一种解决方法:添加发送wx.EVT\ u左\下但要么还是不行,要么我做错了。以下是我尝试的左键单击事件处理程序:

def left_click(self, event):
    print("left click!")
    parent = wx.GetTopLevelParent()
    wx.PostEvent(self.parent, event)

不管怎样,这个问题已经解决了。希望我这里的东西能帮助别人。你知道吗

相关问题 更多 >

    热门问题