Próbuję przechwytywać zdarzenia klawiatury, które występują wewnątrz ramki wx.Frame, i oczekiwałbym następującego kodu, aby uchwycić te zdarzenia. Jednak obsługi onKeyDown nigdy nie jest wywoływana, gdy uruchamiam kod:Zdarzenia klawiatury przechwytywania wxpython w pliku 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()
Jeśli ktoś wie jak to zrobić, będę wdzięczny za pomoc.
Próbowałem dokonać tej zmiany, a także starałem się nie używać pakietu logowania - wystarczy wydrukować. Żadna zmiana nie zadziałała. – Kevin
@Kevin, masz na myśli kod w twojej odpowiedzi działa, a ten w twoim pytaniu lub mojej odpowiedzi nie, nawet eliminując logowanie? Które wersje SO, python i wxPython używasz?. To jest testowane w win7 i winXP, python 2.6, wxpython 2.8.11 i 2.8.12 – joaquin
Używam Ubuntu 11.04 64bit, ponieważ wygląda na to, że już wydedukowałeś. Jest to więc dziwactwo oparte na systemie operacyjnym, ale dodanie panelu do ramki jest łatwe w obsłudze. – Kevin