Tkinter temporizador de 60 segundos.
Estoy intentando hacer un temporizador de 60 segundos para un proyecto, pero estoy atascado aquí. Mi variable “temp” no se actualiza en mi ventana cada vez que la recorro. Cualquier ayuda sería genial.
import tkinter
import time
root = tkinter.Tk()
root.geometry("300x250")
root.title("Contador de Tiempo")
Frame = tkinter.Frame(root)
Frame.pack(side=tkinter.TOP)
Label1 = tkinter.Label(Frame, text="Temporizador")
Label1.pack(side=tkinter.LEFT)
def timer(*args, **kwargs):
temp = int(temps.get())
while temp > -1:
temps.set(str(temp))
root.update()
time.sleep(1)
temp -= 1
temps = tkinter.StringVar()
temps.set("60")
temps.trace("w", timer)
label = tkinter.Label(Frame, textvariable=temps)
label.pack(side=tkinter.LEFT)
label.after(1000, timer)
root.mainloop()
davy.ai
Parece que el problema puede estar en la función
timer
. Ya que contiene un buclewhile
que se retrasa un segundo y decrementa la variabletemp
hasta alcanzar -1, está bloqueando el hilo principal de la interfaz gráfica tkinter y evitando que la variable se actualice en la ventana.Para solucionar esto, puedes utilizar el método
after
de tkinter para llamar repetidamente a una función que reduce la variabletemp
y actualiza la etiqueta. Aquí tienes un ejemplo de cómo puedes modificar el código:En este código, la función
update_timer
obtiene el valor actual detemps
y actualiza la etiqueta con su valor. Sitemp
es mayor o igual a 0, se programa a sí misma para que se ejecute nuevamente en 1000ms utilizandoroot.after
, que es una forma no bloqueante de retrasar la ejecución. Una vez quetemp
alcanza 0, puedes realizar cualquier acción deseada.