matplotlib与事件处理程序的多个连接?

时间:2011-08-01 05:01:14

标签: python events event-handling matplotlib

import sys
import matplotlib
import matplotlib.pyplot as plt
print matplotlib.__version__, matplotlib.get_backend()

def hit(event):
  sys.stderr.write('hit\n')

fig = plt.figure()
cid0 = fig.canvas.mpl_connect('key_press_event', hit)
cid1 = fig.canvas.mpl_connect('button_press_event', hit)
print cid0, cid1
plt.show()

使用上面的代码,为什么我不能同时触发鼠标按下事件和按键事件?看起来按照上面的顺序只有按键事件工作,而如果我交换第10行和第11行(命令cid0和cid1赋值),那么只有鼠标事件才有效。即无论我连接哪一个,都会占用事件处理程序。这是matplotlib的内置限制,还是我试图以错误的方式连接多个事件?

使用一些额外信息进行修改:我的matplotlib.__version__1.1.0。我尝试使用GTKAggTkAgg后端获得相同的结果。使用python和ipython,无论有没有-wthread -pylabipython qtconsole --pylab=inline,都没有什么区别。我得到的连接ID是cid0 == cid1 == 6

编辑2 :我的问题仍然存在于matplotlib版本1.2.xTkAgg后端,sys.version 2.7.2+ (default, Oct 4 2011, 20:06:09) [GCC 4.6.1]

2 个答案:

答案 0 :(得分:3)

我认为你偶然发现了这个错误:Multiple mpl_connect calls ignored

答案 1 :(得分:0)

我尝试了你的代码,并且两个动作(鼠标和键盘)都有效:我每次都“击中”。

我使用ubuntu 10.10,python 2.6.6和matplotlib 0.99.3,全部由synaptic安装(不是通过下载最新版本并运行setup.py,因为这导致我之前遇到了几个大问题。)

我也安装了python2.6-dev,因为在大多数情况下会添加缺少的“.h”标头。

希望这有帮助。