Matplotlib选择事件功能

时间:2015-03-16 20:49:32

标签: python matplotlib wxpython

我有这个非常奇怪的问题,如果你滚动"而鼠标光标放在感兴趣的艺术家对象上。这是预期的行为吗?为了澄清,我使用的是Macbook,滚动我的意思是用两根手指轻扫(或用一只魔术鼠标上的一根手指)。

我试图实现的功能是在某些axvspan段(多边形艺术家对象)上有工具提示,如果单击,则拾取事件有效,但即使您在鼠标悬停在其中一个段上时滚动兴趣,多次挑选事件被解雇。

我无法在网上找到任何人遇到同样问题的内容,并且文档也没有明确解决挑选事件(它只是说:"用户解雇时)在画布上选择一个足够接近艺术家的位置")。什么构成了" pick"?

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

def plot(self):            
    for i in range(len(startTimes)):
        self.axs.axvspan(startTimes[i], endTimes[i], color='blue', alpha=0.3, picker=True))
    self.figure.canvas.mpl_connect('pick_event', self.onpick3)

def onpick3(self, event):
        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]

1 个答案:

答案 0 :(得分:3)

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

上述问题的解决方案是使用MouseEvent的按钮属性过滤事件:

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]

文档可在此处找到:

http://matplotlib.org/api/backend_bases_api.html#matplotlib.backend_bases.MouseEvent

当用户在画布上足够靠近艺术家的位置调用MouseEvent(请参阅上面的链接)时,会触发选择事件。

&#39;充分关闭&#39;可以通过将一个整数作为公差传递给axvspan picker attr来控制,所以&#34; picker = True&#34;可能会变成&#34; picker = 5&#34;。