Python Matplotlib拾取事件功能

Python Matplotlib拾取事件功能,python,matplotlib,wxpython,Python,Matplotlib,Wxpython,我遇到了一个非常奇怪的问题,当鼠标光标放在感兴趣的艺术家对象上时,如果你“滚动”,就会触发拾取事件。这是预期的行为吗?为了澄清这一点,我使用的是Macbook,我所说的滚动指的是两个手指的滑动(或者一个手指在一个魔术鼠标上) 我试图实现的功能是在某些axvspan线段(多边形艺术家对象)上有工具提示,如果单击,拾取事件会起作用,但即使在鼠标位于感兴趣的线段上时滚动,也会触发多个拾取事件 我在网上找不到任何人面临相同问题的地方,文档在触发pick事件时也不是很清楚(它只是说:“当用户在画布上选择一

我遇到了一个非常奇怪的问题,当鼠标光标放在感兴趣的艺术家对象上时,如果你“滚动”,就会触发拾取事件。这是预期的行为吗?为了澄清这一点,我使用的是Macbook,我所说的滚动指的是两个手指的滑动(或者一个手指在一个魔术鼠标上)

我试图实现的功能是在某些axvspan线段(多边形艺术家对象)上有工具提示,如果单击,拾取事件会起作用,但即使在鼠标位于感兴趣的线段上时滚动,也会触发多个拾取事件

我在网上找不到任何人面临相同问题的地方,文档在触发pick事件时也不是很清楚(它只是说:“当用户在画布上选择一个与艺术家足够接近的位置时触发”)。什么构成“选择”

编辑:我正在做的一个示例(这些函数是wxpython面板子类的一部分)

def绘图(自):
对于范围内的i(len(startTimes)):
self.axs.axvspan(开始时间[i],结束时间[i],颜色为蓝色,alpha=0.3,picker=True))
self.figure.canvas.mpl\u connect('pick\u event',self.onpick3)
def onpick3(自身、事件):
x=event.mouseevent.xdata
y=event.mouseevent.ydata
对于范围内的i(len(startTimes)):
如果xstartTimes[i]:
打印标签[i]

您现在可能已经解决了这个问题,但为了便于参考,滚轮注册为按钮,因此这确实是预期的功能

上述问题的解决方案是使用MouseeEvent的button属性过滤事件:

def onpick3(self, event):
    if event.mouseevent.button == 1 # --> Left-click only
        x = event.mouseevent.xdata
        y = event.mouseevent.ydata
        for i in range(len(startTimes)):
            if x < endTimes[i] and x > startTimes[i]:
                print segmentLabels[i]
def onpick3(自身,事件):
如果event.mouseevent.button==1#-->仅左键单击
x=event.mouseevent.xdata
y=event.mouseevent.ydata
对于范围内的i(len(startTimes)):
如果xstartTimes[i]:
打印标签[i]
文档可在此处找到:

当用户在画布上离艺术家足够近的位置调用MouseEvent(参见上面的链接)时,将触发pick事件


“足够接近”可以通过将一个整数作为公差传递给axvspan选择器attr来控制,因此上面的“picker=True”可能会变成“picker=5”。

如果使用带滚轮的真实鼠标,是否会发生同样的情况?你能举一个简单的例子来说明这个问题吗?是的,我刚刚证实了。当然,请看我上面的编辑
def onpick3(self, event):
    if event.mouseevent.button == 1 # --> Left-click only
        x = event.mouseevent.xdata
        y = event.mouseevent.ydata
        for i in range(len(startTimes)):
            if x < endTimes[i] and x > startTimes[i]:
                print segmentLabels[i]