2010-03-08 4 views
1

L'événement de clé suivant ne fonctionne pas. Une idée?Problème d'événement de clé d'échappement dans wxPython?

class Frame(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, -1, title='testing', size=(300,380),      style=                      wx.MINIMIZE_BOX|wx.SYSTEM_MENU 
                          |wx.CAPTION|wx.CLOSE_BOX|wx.CLIP_CHILDREN) 

     self.tree = HyperTreeList(self, style = wx.TR_DEFAULT_STYLE | 
               wx.TR_FULL_ROW_HIGHLIGHT | wx.TR_HAS_VARIABLE_ROW_HEIGHT | wx.TR_HIDE_ROOT) 

     # create column 
     self.tree.AddColumn("coll") 

     self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) 

def OnKeyDown(self, event): 
     keycode = event.GetKeyCode() 
     print "keycode ", keycode 
     if keycode == wx.WXK_ESCAPE: 
      print "closing" 
      self.Close() 

Cordialement,

+0

Que signifie "ne fonctionne pas"? Le code clé est-il affiché? – Oddthinking

+0

no. Quand j'appuie sur la touche Echap, rien ne s'est passé. J'ai aussi essayé différentes clés mais sans succès. – MA1

Répondre

2

Le problème est que l'accent est pris ici par cntrl des arbres, et par conséquent tous les KeyEvent vont-il pas l'ordinateur central de liaison donc à l'ordinateur central ne fonctionne pas. Donc, le premier instinct serait de se lier à l'arbre cntrl, par exemple.

self.tree.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) 

mais cela fonctionnera pas non plus que, arbre lui-même se compose de deux fenêtres enfants, une fenêtre d'en-tête et une fenêtre principale, voir le code de HyperTreeList ce qui fonctionne est ce

self.tree._main_win.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) 

Mais ce semble inélégant et repose sur les détails internes de HyperTreeList, et _main_win qui est dérivé de CustomTreeCntrl lui-même utilise cet événement, donc vous devez également faire attention à attraper de tels événements.

+0

Merci Anurag, mais pourquoi le mainframe n'attrape pas l'événement? Je lie l'événement avec le mainframe, alors pourquoi le contrôle de l'arbre interfère-t-il avec l'événement? – MA1