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".

Надеюсь, это поможет.

Другие вопросы по тегам