我正在编写一个小的matplotlib工具,它循环遍历一组帧,并且应该响应一些键盘和鼠标事件。但是,我的一些button_press_events被忽略了,我不明白为什么。这是一个MWE:
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
framecounter = ax.text(0.5, 0.5, '')
def on_click(event):
print event.xdata
def func(i):
framecounter.set_text(str(i))
return framecounter,
def toggle_pause(event):
if event.key.isspace():
if anim.running:
anim.event_source.stop()
else:
anim.event_source.start()
anim.running ^= True
anim = FuncAnimation(fig, func, 100)
anim.running = True
fig.canvas.mpl_connect('button_press_event', on_click)
fig.canvas.mpl_connect('key_press_event', toggle_pause)
plt.show()
我不确定播放/暂停功能是否与问题有关,但它有助于重现问题。
如果我的button_press_events在暂停动画后立即发生,则会被忽略。第二次按下始终打印输出,如果我先移动鼠标或在点击前等待几秒钟,它也会打印输出。
这里发生了什么?
我在不同系统上尝试使用mpl2.1.1和mpl2.2.2使用TKAgg和QT4Agg。