¿Cómo usar el método Tkinter after ()?

Tengo un problema con el método after en Tkinter .

El plan es imprimir i con intervalo de un segundo. Verifiqué si el método after es adecuado, pero no sé exactamente.

Aquí está el código.

 # -*- coding: utf-8 -*- from Tkinter import * import time root = Tk() root.title("Program") root['background'] ='gray' def command_Print(): for i in range(0, 10, 1): time.sleep(1) Label0.after(1) Labelvar.set(i) Labelvar = StringVar() Labelvar.set(u'original value') Frame0 = Frame(root) Frame0.place(x=0, y=0, width=100, height=50) Label0 = Label(Frame0, textvariable=Labelvar, anchor='w') Label0.pack(side=LEFT) Frame_I = Frame(root) Frame_I.place(x = 100, y = 0, width=100, height=70) Button_I = Button(Frame_I, text = "Button" , width = 100, height=70, command = command_Print) Button_I.place(x=0, y=0) Button_I.grid(row=0, column=0, sticky=W, pady=4) Button_I.pack() root.mainloop() 

No use time.sleep() en absoluto en las aplicaciones Tkinter. Haga que la callback programe una llamada a sí mismo con after() .

 def command_Print(counter=0): Labelvar.set(counter) if counter < 10: root.after(1000, lambda: command_Print(counter+1)) 

Además, el range(0, 10, 1) es solo el range(10) . No hay necesidad de repetir los valores por defecto.

after con un solo argumento (por ejemplo: after(10) ) es lo mismo que llamar a time.sleep , y generalmente se debe evitar. Ya que pone su GUI en suspensión, su GUI no podrá responder a ningún evento (incluidas las solicitudes del usuario o del sistema operativo para actualizar o cambiar el tamaño de la ventana)

Cuando llama after con dos o más argumentos, el segundo argumento es una referencia a una función que desea llamar en el futuro. Todos los argumentos restantes serán pasados ​​a esa función.

Tkinter mantiene una cola de eventos. mainloop es la función que vigila esa cola y ejecuta los eventos a medida que entran. Cuando llama after , la función que solicitó simplemente se agrega a la cola con una marca de tiempo. Cuando esté listo para ser procesado, tkinter llamará a la función y pasará los argumentos. Es tan simple como eso.