In wxPython wie bindest du ein EVT_KEY_DOWN-Event an das ganze Fenster?

Ich kann ein event an eine textctrl box np binden. Das Problem ist, dass ich in die Text-Box-Box geklickt werden muss, um diese Veranstaltung zu "fangen". Ich hoffe, jederzeit fangen zu können, wenn jemand die Pfeiltasten drückt, während das Hauptfenster den Fokus hat.

FUNKTIONIERT NICHT:

  • Python: name 'math' ist nicht definiert Fehler?
  • Erfassen von Videodaten vom Bildschirm in Python
  • Ist es möglich, eine Ausnahme zu stornieren, die nicht gefangen wurde?
  • InvalidBasesError: Grundlagen für [<ModelState: 'users.GroupProxy'> können nicht aufgelöst werden
  • Python reguläre Ausdrücke
  • Wie bekomme ich die riesige Komponente eines NetworkX-Graphen?
  • wx.EVT_KEY_DOWN(self, self.OnKeyDown) 

    ARBEITEN:

     self.NudgeTxt = wx.TextCtrl(self.panel, size=(40,20), value=str(5)) wx.EVT_KEY_DOWN(self.NudgeTxt, self.OnKeyDown) 

    Ich bin mir ziemlich sicher, dass ich etwas einfaches fehle. Bin aber ein bisschen stecken geblieben

  • Python - Legende überlappt mit dem Kreisdiagramm
  • Python Client-Authentifizierung mit ssl und Socket
  • Einen Job mit hadoop streaming und mrjob ausführen: PipeMapRed.waitOutputThreads (): subprocess fehlgeschlagen mit Code 1
  • Python OSX $, die Python gibt /Library/Frameworks/Python.framework/Versions/2.7/bin/python
  • Python opencv-finding circle (sonne), koordinaten des zentrums des kreises vom bild
  • Verwenden Sie Python & XML-RPC, um ein benutzerdefiniertes Feld zu einem Wordpress-Beitrag hinzuzufügen?
  • 2 Solutions collect form web for “In wxPython wie bindest du ein EVT_KEY_DOWN-Event an das ganze Fenster?”

    Versuchen Sie stattdessen, an wx.EVT_CHAR_HOOK zu wx.EVT_CHAR_HOOK

    z.B.

     self.Bind(wx.EVT_CHAR_HOOK, self.onKey) ... def onKey(self, evt): if evt.GetKeyCode() == wx.WXK_DOWN: print "Down key pressed" else: evt.Skip() 

    Sie könnten EVT_CHAR_HOOK verwenden,

      self.Bind(wx.EVT_CHAR_HOOK, self.hotkey) def hotkey(self, event): code = event.GetKeyCode() if code == wx.WXK_LEFT: # or whatever... ... 

    Oder einen Beschleunigertisch verwenden

      ac = [(wx.ACCEL_NORMAL, wx.WXK_LEFT, widget.GetId())] tbl = wx.AcceleratorTable(ac) self.SetAcceleratorTable(tbl) 

    Sie müssen eine Schaltfläche oder Widgets ID in der Beschleunigungstabelle verwenden, und durch Drücken der Taste wird der Widgets-Event-Handler ausgelöst.

    Wenn du keine Widgets hast, die du möchtest, dass ihre Events ausgelöst werden und lieber irgendwie ein "unsichtbares" Widget mit Eventbindungen haben, dann kannst du das machen:

      ac = [] keys = [wx.WXK_LEFT, wx.WXK_RIGHT, wx.WXK_UP, wx.WXK_DOWN] for key in keys: _id = wx.NewId() ac.append((wx.ACCEL_NORMAL, key, _id)) self.Bind(wx.EVT_MENU, self.your_function_to_call, id=_id) tbl = wx.AcceleratorTable(ac) self.SetAcceleratorTable(tbl) 

    Ich Iteration über die interessierten Schlüssel zu binden, und erstellen Sie neue Widgets IDs für sie. Ich benutze diese IDs, um Menüpunkte zu binden (welche Beschleunigertasten auslösen) und diese IDs in der Liste der Tupel der Beschleunigertabelle verwenden.

    Python ist die beste Programmiersprache der Welt.