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
。我尝试使用GTKAgg
和TkAgg
后端获得相同的结果。使用python和ipython,无论有没有-wthread -pylab
,ipython qtconsole --pylab=inline
,都没有什么区别。我得到的连接ID是cid0 == cid1 == 6
。
编辑2 :我的问题仍然存在于matplotlib版本1.2.x
和TkAgg
后端,sys.version 2.7.2+ (default, Oct 4 2011, 20:06:09) [GCC 4.6.1]
答案 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”标头。
希望这有帮助。