Heim > Artikel > Backend-Entwicklung > Wie kann ich sicherstellen, dass meine benutzerdefinierten Tkinter-Text-Widget-Bindungen nach integrierten Bindungen ausgeführt werden?
Benutzerdefinierte Ereignisse im Tkinter-Text-Widget nach integrierten Bindungen binden
Das Problem verstehen
Im Text-Widget von Tkinter kann es vorkommen, dass Ihre benutzerdefinierten Ereignisbindungen vor den integrierten Bindungen des Widgets ausgeführt werden, was zu Diskrepanzen bei Textaktualisierungen führt.
Lösung
Um dieses Problem zu beheben, können Sie die Reihenfolge ändern, in der Ereignisse verarbeitet werden. Tkinter-Widgets wird eine Hierarchie von „Bindtags“ zugewiesen, die die Reihenfolge der Bindungsausführung bestimmen.
1. Bindtags neu anordnen
Die Standardreihenfolge der Bindtags ist: Widget, Klasse, Toplevel, alle. Sie können die Reihenfolge ändern, indem Sie das Widget-Bindtag nach dem Klassen-Bindtag platzieren. Auf diese Weise werden Klassenbindungen vor Widget-Bindungen ausgeführt.
<code class="python"># Modify the bindtags to rearrange the order entry.bindtags(('Entry', '.entry', '.', 'all'))</code>
2. Einführung zusätzlicher Bindtags
Alternativ können Sie nach dem Klassen-Bindtag ein neues Bindtag erstellen und Ihre benutzerdefinierten Ereignisse an dieses neue Tag binden.
<code class="python"># Create a new bindtag "post-class-bindings" after the class bindtag entry.bindtags(('.entry','Entry','post-class-bindings', '.', 'all')) # Bind your custom events to "post-class-bindings" entry.bind_class("post-class-bindings", "<KeyPress>", OnKeyPress)</code>
Vorteile beider Ansätze
Beispielcode
Der folgende Code demonstriert beide Ansätze:
<code class="python">import Tkinter def OnKeyPress(event): value = event.widget.get() string="value of %s is '%s'" % (event.widget._name, value) status.configure(text=string) root = Tkinter.Tk() entry1 = Tkinter.Entry(root, name="entry1") entry2 = Tkinter.Entry(root, name="entry2") entry3 = Tkinter.Entry(root, name="entry3") # Three different bindtags entry1.bindtags(('.entry1', 'Entry', '.', 'all')) entry2.bindtags(('Entry', '.entry2', '.', 'all')) entry3.bindtags(('.entry3','Entry','post-class-bindings', '.', 'all')) # Bind the first two entries to the default bind tags entry1.bind("<KeyPress>", OnKeyPress) entry2.bind("<KeyPress>", OnKeyPress) # Bind the third entry to the "post-class-bindings" bind tag entry3.bind_class("post-class-bindings", "<KeyPress>", OnKeyPress) # ... Continue with your GUI code </code>
Das obige ist der detaillierte Inhalt vonWie kann ich sicherstellen, dass meine benutzerdefinierten Tkinter-Text-Widget-Bindungen nach integrierten Bindungen ausgeführt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!