[ Foro de Python ]
Hola!
Quiero crear una cuenta atrás con interfaz gráfica en Python. Pero no sé como hacer para que la funcion cuentaatras actualice las labels. Ahora mismo al ejecutar la función la ventana v1a se queda bloqueada hasta que termine la función.
CODIGO:
from tkinter import *
from time import *
from tkinter.messagebox import *
def mostrar(v): v.deiconify()
def ocultar(v): v.withdraw()
def ejecutar(f): v1.after(200,f)
def cuentaatras(_h,_m,_s):
x = True
try:
h = int(_h.get())
m = int(_m.get())
s = int(_s.get())
while (x==True):
_h.set(h)
_m.set(m)
_s.set(s)
print(str(h)+":"+str(m)+":"+str(s))#Test
if s==0 and m!=0:
sleep(1)
s=60
m-=1
print(str(h)+":"+str(m)+":"+str(s))#Test
elif s==0 and m==0 and h!=0:
sleep(1)
s=60
m=60
h-=1
print(str(h)+":"+str(m)+":"+str(s))#Test
elif s==0 and m==0 and h==0:
x=False
sleep(1)
s-=1
except ValueError:
v1a.withdraw()
showerror("Rellena todos los campos","Rellena los campos con 0 para que sean invalidos")
#ventana cuenta atrás
v1 = Tk()
v1.title("Cuenta atrás")
v1.resizable(0,0)
f1=Frame(v1)
f1.grid(column=0,row=0,padx=(10,10),pady=(10,10))
#ventana cuenta atrás 2
v1a = Toplevel(v1)
v1a.title = v1.title
v1a.resizable(0,0)
v1a.withdraw()
#Elementos Cuenta atrás
#Labels
LEnCA = Label(f1,text="Introduce el tiempo que quieras contar.").grid(column=1,row=1,columnspan=3,pady=(0,5))
Lh1 = Label(f1,text="Horas:").grid(column=1,row=2)
Lm1 = Label(f1,text="Minutos:").grid(column=2,row=2)
Ls1 = Label(f1,text="Segundos:").grid(column=3,row=2)
#Entradas
Eh = StringVar()
Ehoras = Entry(f1,width=5,textvar=Eh).grid(column=1,row=3)
Em = StringVar()
Eminutos = Entry(f1,width=5,textvar=Em).grid(column=2,row=3)
Es = StringVar()
Esegundos = Entry(f1,width=5,textvar=Es).grid(column=3,row=3)
#Botones
Bstart1 = Button(f1,text="Start",command=lambda:ejecutar(mostrar(v1a)or (cuentaatras(Eh,Em,Es)))).grid(column=4,row=3)
Bcerrar1= Button(f1,text="Cerrar",command=lambda:ejecutar(ocultar(v1))).grid(column=2,row=4)
#Elementos Cuenta atrás 2
#Labels
h3 = StringVar()
Lh3 = Label(v1a,text=h3).grid(column=1,row=2)
m3 = StringVar()
Mh3 =Label(v1a,text=m3).grid(column=2,row=2)
s3 = StringVar()
Ls3 = Label(v1a,text=s3).grid(column=3,row=2)
#Botones
Bparar = Button(v1a,text="Parar",command=()).grid(column=4,row=2)
Bcerrar1= Button(v1a,text="Cerrar",command=lambda:ejecutar(ocultar(v1a))).grid(column=2,row=3)
v1.mainloop()
Muchas gracias.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)