In meinem Programm möchte ich meine GUI aktualisieren, während der Benutzer tippt. Aus Ressourcengründen würde ich es aber nur dann gerne machen, wenn der Benutzer für x Millisekunden nichts eingegeben hat. Hier ist ein Beispiel, das funktioniert, aber ich mag es nicht sehr, weil es zwei zusätzliche Funktionen benötigt und ein wenig wortreich ist.Warten Sie, bis der Benutzer die Eingabe beendet hat. Tkinter
import tkinter as tk
import random
COLORS =["red", "orange", "yellow", "green", "blue", "violet"]
class Application(tk.Frame):
def __init__(self,master):
self.counter = 0
self.master = master
tk.Frame.__init__(self)
self.pack()
self.entry = tk.Entry(self)
self.entry.pack()
self.entry.bind('<Key>',lambda event: self.handle_wait(event))
def handle_wait(self,event):
self.counter += 1
counter = self.counter
self.after(1000,lambda: self.handle_wait2(counter))
def handle_wait2(self,counter):
if self.counter == counter:
self.change_color()
def change_color(self):
random_color = random.choice(COLORS)
self.entry.config(background=random_color)
root = tk.Tk()
app = Application(root)
app.mainloop()
Gibt es einen besseren Weg, es zu tun?
Sie können möglicherweise die optionalen Validierungsfunktionen eines 'Entry'-Widgets verwenden, um die Zeit aufzuzeichnen, zu der der letzte Tastendruck eingegeben wurde, und dann diesen Wert in einer' after() 'Callback-Funktion prüfen. Es gibt Details zur 'Eingabe'-Widget-Validierung [hier] (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/entry-validation.html). – martineau