Entry Problem

Fragen zu Tkinter.
Antworten
HardwareManager
User
Beiträge: 59
Registriert: Freitag 31. Mai 2013, 21:18

Hallo,
wenn ich den Code ausführe und "Hallo" eingebe
dann bekomme ich nur


H
Ha
Hal
Hall
als output.
Wie kann ich den letzten Buchstaben auch bekommen?

Code: Alles auswählen

from tkinter import *

def EHandler(event):
    print(event.widget.get())

root = Tk()
E = Entry(root)
E.bind("<Key>", EHandler)
E.pack()
root.mainloop()
ImmmerEineGuteIdee
|=|=|=|=|=|=|=|
HardwareManager
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Für tk-Entries nimmt man am besten StringVars, die den Inhalt repräsentieren:

Code: Alles auswählen

import tkinter as tk

class Main:
    def __init__(self, root):
        self.text = tk.StringVar(root)
        self.text.trace('w', self.watch)
        entry = tk.Entry(root, textvariable=self.text)
        entry.pack()

    def watch(self, *_):
        print(self.text.get())

def main():
    root = tk.Tk()
    m = Main(root)
    root.mainloop()

if __name__ == '__main__':
    main()
Hat den Vorteil, dass auch Copy-Paste funktioniert.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Ich würde sagen, dass das ein Timing Problem ist. Wenn man die Taste drückt, ist der letzte Buchstabe gar noch nicht erfasst und Du fragst das Entryfeld zu früh ab. Eine Pause mit after sollte das Problem lösen, falls man es mit dem <key> event machen will. Aber die Lösung von Sirius3 ist, was man richtigerweise macht
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Oder statt mit after rumzufuddeln einfach "<KeyRelease>".
HardwareManager
User
Beiträge: 59
Registriert: Freitag 31. Mai 2013, 21:18

Danke für die vielen Antworten :)
Es geht jetzt
ImmmerEineGuteIdee
|=|=|=|=|=|=|=|
HardwareManager
Antworten