2011-06-21 16 views

Respuesta

3

he usado EVT_KEY_DOWN en una subclase de diálogo. En el método de __init__ de su clase de diálogo, se unen a EVT_KEY_DOWN:

def __init__(self, ....): 
    # ...other init code... 
    self.Bind(wx.wx.EVT_KEY_UP, self.handle_key_up) 

a continuación, proporcionar un método en su diálogo como:

def handle_key_up(self, event): 
    keycode = event.GetKeyCode() 
    lc = self.list_ctrl_fields 

    # handle F2 
    if keycode == wx.WXK_F2: 
     print "got F2" 

(. Probado en Python 2.6, wxPython 2.8.10)

3

¿Es esto lo que quieres decir? Debe mirar los Aceleradores globales. Por coincidencia, he estado mirando esto el último día o dos también. Suponiendo que la ventana de la aplicación wxpython tiene foco, lo siguiente debe llamar a la rutina apropiada al presionar las teclas. Trabajando en mi ubuntu 11.04/py 2.7.1/wxpython 2.8

Es evidente que podría consolidar el método de evento si es necesario.

No hay mucho que se encuentran en este tema, pero this link y this link me ayudó (mismo sitio web)

import wx 

class MyFrame(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Global Keypress") 
     self.panel = wx.Panel(self, wx.ID_ANY) 
     self.CreateStatusBar() 

     # Global accelerators 

     id_F1 = wx.NewId() 
     id_F2 = wx.NewId() 

     self.Bind(wx.EVT_MENU, self.pressed_F1, id=id_F1) 
     self.Bind(wx.EVT_MENU, self.pressed_F2, id=id_F2) 

     accel_tbl = wx.AcceleratorTable([ 
      (wx.ACCEL_NORMAL, wx.WXK_F1, id_F1), 
      (wx.ACCEL_NORMAL, wx.WXK_F2, id_F2) 
     ]) 
     self.SetAcceleratorTable(accel_tbl) 

    def pressed_F1(self, event): 
     print "Pressed F1" 
     return True 

    def pressed_F2(self, event): 
     print "Pressed F2" 
     return True 

if __name__ == "__main__": 
    app = wx.PySimpleApp() 
    f = MyFrame().Show() 
    app.MainLoop() 
Cuestiones relacionadas