Frage

Ich denke, das muss eine ziemlich grundlegende Frage sein, aber ich habe sie ohne klare Antwort zu Tode gegoogelt, also los geht's:Ich habe eine TextCtrl und möchte eine ziemlich einfache Abfolge von Ereignissen:1) Der Benutzer bewegt den Fokus per Haken oder Gauner auf das Steuerelement.2) Der Benutzer gibt etwas in die TextCtrl ein.3) Der Benutzer drückt Return oder Tab.4) Zu diesem Zeitpunkt erfasst der Code den Text in der TextCtrl , führt eine einfache Verarbeitung durch und verschiebt den Fokus dann auf das nächste Steuerelement in der Tabulatorreihenfolge.

Kann mir jemand sagen, wie das geht?Es scheint mir so einfach zu sein, aber ich kann die Antwort nirgendwo finden.Tut mir leid, wenn ich etwas Offensichtliches übersehen habe.

War es hilfreich?

Lösung

Damit dies ordnungsgemäß funktioniert, müssen Sie wichtige Ereignisse abfangen und überprüfen, ob der Benutzer die Eingabetaste oder die Tabulatortaste gedrückt hat.Wie @sundar bereits erwähnt, müssen die Widgets untergeordnete Elemente eines Panels sein, damit Tabbing auf allen Plattformen ordnungsgemäß funktioniert.Hier ist ein ziemlich einfaches Beispiel:

import wx

########################################################################
class MyPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        self.text = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER)
        self.text.Bind(wx.EVT_KEY_DOWN, self.onEnter)
        btn = wx.Button(self, label="Do something")
        self.text.SetFocus()

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.text, 0, wx.EXPAND|wx.ALL, 5)
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
        self.SetSizer(sizer)

    #----------------------------------------------------------------------
    def onEnter(self, event):
        """"""
        keycode = event.GetKeyCode()
        if keycode == wx.WXK_RETURN or keycode == wx.WXK_NUMPAD_ENTER or keycode == wx.WXK_TAB:
            self.process_text(event=None)
            event.EventObject.Navigate()
        event.Skip()

    #----------------------------------------------------------------------
    def process_text(self, event):
        """
        Do something with the text
        """
        text = self.text.GetValue()
        print text.upper()
        for word in text.split():
            print word

########################################################################
class MyFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="TextCtrl Demo")
        panel = MyPanel(self)
        self.Show()

if __name__ == "__main__":
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()

Hier binden wir an wx.EVT_KEY_DOWN und lassen Sie es den gedrückten Schlüsselcode extrahieren.Dann wird überprüft, ob der Schlüsselcode die Eingabetaste oder die Tabulatortaste ist.Wenn dies der Fall ist, ruft es eine Funktion auf, um den Text zu verarbeiten, und ruft dann auf event.EventObject.Navigate(), wodurch wxPython den Fokus auf das nächste Widget in der Tabulatorreihenfolge verschiebt.

Vielleicht möchten Sie Folgendes zu diesem Thema lesen:

Weitere Informationen zu den Schlüssel- und Zeichenereignissen von wxPython finden Sie im Folgenden:

Andere Tipps

1. Für das TABBING, um überhaupt zu arbeiten, das Fenster oder das individuelle Panel, das Sie plonk Controls / Wigits aufstellen, müssen im Rahmen seines Style-Flags folgender Jahre haben: WXtab_Traversal dh;

generasacodicetagpre.

2.Die Registerkarte Reihenfolge wird von der Reihenfolge festgelegt, in der Sie Steuerelemente an das Panel oder den Rahmen hinzufügen.

Die Tabbissreihenfolge

3) scheint auch in den Auftragseiten abhängig zu sein.Ich gehe davon aus, dass dies auf Widget-ID-Nummern zurückzuführen ist.Reihenfolge der Ergänzung zu den Sizers / Panels schien mir nicht zu helfen.

4) Hier ist eine kleine DEMOFOR-Registerkarte, sobald Sie die Steuerelemente aufweisen:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top