В моей программе я хотел бы обновить свой gui во время ввода пользователем. По соображениям ресурса я бы хотел только сделать это, если пользователь не набрал что-то за миллисекунды. Вот пример, который работает, но мне это не очень нравится, потому что ему нужны две дополнительные функции и немного подробный.Подождите, пока пользователь не перестанет печатать в 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()
Есть ли лучший способ сделать это?
Возможно, вы сможете использовать необязательные функции проверки виджета 'Entry', чтобы записать время последнего нажатия клавиши, а затем проверить это значение в функции обратного вызова' after() '. Подробности о проверке виджета «Вход» [здесь] (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/entry-validation.html). – martineau