Estoy tratando de capturar los eventos del teclado que ocurren dentro de un wx.Frame, y esperaría que el siguiente código capturara esos eventos. Sin embargo, el manejador OnKeyDown nunca es llamado cuando corro el código:wxpython capturar eventos del teclado en un 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()
Si alguien sabe cómo hacer esto, le agradecería un poco de ayuda.
Intenté hacer este cambio, y también traté de no usar el paquete de registro, simplemente imprima. Ningún cambio funcionó. – Kevin
@Kevin, ¿quiere decir que el código en su respuesta funciona y el de su pregunta o mi respuesta no, incluso eliminando el registro? ¿Qué versiones de SO, python y wxPython estás usando? Esto se prueba en win7 y winXP, python 2.6, wxpython 2.8.11 y 2.8.12 – joaquin
Estoy usando Ubuntu 11.04 64 bits, ya que parece que ya lo dedujo. Por lo tanto, es una peculiaridad basada en el SO, pero agregar el panel al marco es una solución fácil. – Kevin