Python: Wie ein aktualisierter Eintrag Text zu erhalten in einem Befehl, um es binded zu benutzen?

StackOverflow https://stackoverflow.com/questions/4287553

  •  28-09-2019
  •  | 
  •  

Frage

Betrachten Sie den folgenden Code ein:

text = Entry(); text.pack()
def show(e):
    print text.get()
text.bind('<Key>', show)

Lassen Sie uns sagen habe ich die Buchstaben ABC im Entry, eins nach dem anderen. Der Ausgang wäre:

>>> 
>>> A
>>> AB

Beachten Sie, dass, wenn A drücken, druckt es einen leeren String. Wenn ich B drücken, druckt er A, nicht AB. Wenn ich nach C nicht drücken nichts tun, es wird nie angezeigt. Es scheint, dass der Eintrag Inhalt erst nach dem Binded Befehl zurückgegeben wird aktualisiert, so dass ich nicht den tatsächlichen Eingabewert in dieser Funktion verwenden kann.

Gibt es eine Möglichkeit, einen aktualisierte Eingabewert zu erhalten in einem Binded Befehl zu benutzen?

War es hilfreich?

Lösung

Sie könnten die <Key> Veranstaltung mit dem <KeyRelease> Ereignisse ersetzen. Das sollte funktionieren.

Hier ist eine Liste von Veranstaltungen: http: / /infohost.nmt.edu/tcc/help/pubs/tkinter/events.html#event-types

Andere Tipps

Der Grund dafür hat mit Tk „bindtags“ zu tun. Bindungen sind mit Umbauten verbunden sind, und die Bindungen werden in Tag verarbeitet. Beide Widget Namen und Widget-Klassen sind die Tags, und sie werden in dieser Reihenfolge verarbeitet (Widget-spezifische Bindungen ersten, Klasse Bindungen Sekunde).

Aus diesem Grunde kann jedes Mal, wenn Sie eine Taste drücken, Ihre Widget spezifische Bindung wird ausgelöst, bevor die Klasse verbindlich eine Chance hat, um das Widget zu ändern.

Es gibt viele Abhilfen. Am einfachsten ist es, <KeyRelease> zu binden, da die Klasse Bindungen auf dem Tastendruck geschehen. Es gibt andere Lösungen, die entweder beinhalten das Hinzufügen oder Neuordnen bind-Tags oder mit der integrierten Datenvalidierungsfunktionen des Eintrags Widget. Welche ist am besten hängt davon ab, was Sie wirklich zu erreichen versuchen.

Weitere Informationen über die Datenvalidierung Funktionen finden Sie diese Frage: interaktiv Validieren Eintrag-Widget Inhalt in tkinter

Für eine umfassende Antwort finden Sie unter Tkinter: set StringVar nach Veranstaltung, einschließlich der Taste gedrückt

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