matplotlib несколько подключений к обработчику событий? - PullRequest
10 голосов
/ 01 августа 2011
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, не имеет значения. Идентификаторы соединения, которые я получаю, cid0 == cid1 == 6.

edit 2 : Моя проблема до сих пор остается с версией matplotlib 1.2.x и TkAgg backend, sys.version 2.7.2+ (default, Oct 4 2011, 20:06:09) [GCC 4.6.1]

Ответы [ 2 ]

3 голосов
/ 24 мая 2012

Думаю, вы наткнулись на эту ошибку: Несколько вызовов mpl_connect игнорируются

0 голосов
/ 23 августа 2011

Я попробовал ваш код, и оба действия (мышь и клавиатура) сделали свое дело: я "ударил" каждый раз.

Я использую ubuntu 10.10, python 2.6.6 и matplotlib 0.99.3, все устанавливаемые с помощью synaptic (не путем загрузки последней версии и запуска setup.py, так как это привело меня к нескольким большим проблемам ранее).

У меня также установлен python2.6-dev, поскольку в большинстве случаев он добавляет отсутствующие заголовки ".h".

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...