Как зарегистрировать несколько триггеров KeyEvent в wxPython

В настоящее время я использую wxPython для разработки интерактивного приложения; в котором я хотел бы сохранить и повторить последнюю нажатую клавишу. Пример того, чего я пытаюсь достичь:

[клавиша 'a' нажата и удерживается][клавиша 'b' нажата и удерживается][клавиша 'b' отпущена][клавиша 'a' отпущена]

аааааааааааааааааааааааааааббббббббббббббббббааааааааааааааааааааааааааааааа

Кажется, я не могу найти способ вручную инициировать подобное событие, я пытался использовать wx.PostEvent, но либо использую его неправильно, либо это не то, что мне нужно, поскольку технически Событие key_down не сработало, когда должна была регистрироваться вторая группа 'a', и я не могу понять, как запустить событие key_down с определенным значением.


person Jeff Langemeier    schedule 15.08.2011    source источник


Ответы (3)


Одним из вариантов в подобных случаях является опрос состояния ключа самостоятельно. в петле. Если нажата клавиша «а», вызовите свое действие

person arunkumar    schedule 15.08.2011

Если вы хотите перехватывать события с несколькими ключами, у вас есть два варианта. Вы можете поймать EVT_CHAR или создать таблицу ускорителей. Вот статья, в которой я попытался объяснить, как работает EVT_CHAR: http://www.blog.pythonlibrary.org/2009/08/29/wxpython-catch-key-and-char-events/

Вот еще одна статья о таблицах ускорителей: http://www.blog.pythonlibrary.org/2010/12/02/wxpython-keyboard-shortcuts-accelerators/

С первым вы можете «записать» то, что было нажато. Я не знаю, почему ты хочешь это сделать. Я не думаю, что wxPython предоставляет способ воспроизведения нажатых клавиш. В Windows есть сторонний модуль SendKeys, который вы можете использовать для этого: http://www.rutherfurd.net/python/sendkeys/

Если ничего из этого не помогает, спросите в официальном списке рассылки wxPython / группе Google. Эти ребята, вероятно, могут помочь вам.

person Mike Driscoll    schedule 16.08.2011

Перехватывайте события нажатия/нажатия клавиши и действуйте соответственно. http://docs.wxwidgets.org/2.8/wx_wxkeyevent.html http:// www.wxpython.org/docs/api/wx.KeyEvent-class.html

person Stefano Mtangoo    schedule 15.08.2011
comment
Это отлично работает для событий SINGLE key_up, key_down или char, проблема в том, что технически у него нет памяти, поэтому после того, как я нажму и удерживаю первый key_down, если я нажму второй без удаления первого, [b] нет способ перезапустить первый key_down[/b], который является сутью проблемы. Одно событие keyEvent не может справиться с этим и не имеет документации как таковой. - person Jeff Langemeier; 16.08.2011