Я пытаюсь захватить события клавиатуры, которые происходят внутри wx.Frame, и я ожидал бы следующий код для захвата этих событий. Однако обработчик OnKeyDown никогда не вызывается, когда я запускаю код:wxpython захват событий клавиатуры в wx.Frame
import logging as log
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,100))
self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
self.Bind(wx.EVT_KEY_UP, self.OnKeyDown)
self.Bind(wx.EVT_CHAR, self.OnKeyDown)
self.SetFocus()
self.Show(True)
def OnKeyDown(self, event=None):
log.debug("OnKeyDown event %s" % (event))
if __name__ == "__main__":
app = wx.App(False)
gui = MainWindow(None, "test")
app.MainLoop()
Если кто-нибудь знает, как это сделать, я был бы признателен за помощь.
Я попытался сделать это изменение, а также попытался не использовать пакет регистрации - просто распечатайте. Ничего не изменилось. – Kevin
@ Kevin, вы имеете в виду, что код в вашем ответе работает, а тот, что есть в вашем вопросе или мой ответ, нет, даже устраняя ведение журнала? Какие версии SO, python и wxPython вы используете? Это проверено в win7 и winXP, python 2.6, wxpython 2.8.11 и 2.8.12 – joaquin
Я использую Ubuntu 11.04 64bit, поскольку он выглядит так, как вы уже вывели. Так что это причуда, основанная на ОС, но добавление панели в рамку - это простое решение. – Kevin