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, или я пытаюсь соединить несколько событий неправильно?
редактировать с дополнительной информацией: My matplotlib.__version__
является 1.1.0
, Я пробовал с GTKAgg
а также TkAgg
бэкэнды с тем же результатом. Использование Python и IPython, с или без -wthread -pylab
, ipython qtconsole --pylab=inline
, не имеет значения. Идентификаторы соединения, которые я получаю, 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]
2 ответа
Я думаю, что вы наткнулись на эту ошибку: несколько вызовов mpl_connect игнорируются
Я попробовал ваш код, и оба действия (мышь и клавиатура) сделали свое дело: я "ударил" каждый раз.
Я использую Ubuntu 10.10, Python 2.6.6 и Matplotlib 0.99.3, все они устанавливаются Synaptic (не путем загрузки последней версии и запуска setup.py, так как это привело меня к нескольким большим проблемам ранее).
У меня также установлен python2.6-dev, так как в большинстве случаев он добавляет отсутствующие заголовки ".h".
Надеюсь, это поможет.