[英]Python/tkinter timer doesn't update label --- Newbie
我是这一切的新手,所以请耐心等待,代码非常简单,计时器组件本身经过单独测试并且可以正常工作,将其与 tkinter 捆绑在一起,要么不更新 label,要么不渲染应用程序回应。 请帮忙。 据我了解,我创建了 mylabel,将其放在根目录中。 我没有在 python 代码中打印,而是使用 mylabel.config 更新值,数学检查出来,但 gui 仍然没有更新。 mylabel.after 位于每个配置的末尾。 该应用程序现在崩溃了,我不知道为什么,如果可以,请详细说明。
from tkinter import *
import time
from playsound import playsound
root = Tk()
root.title("Timer")
root.geometry("600x400")
hours = Entry(root)
hours.insert(0,"Enter hours")
hours.grid(row=0, column =0)
brr = Label(root, text=":").grid(row=0, column =1)
minutes = Entry(root)
minutes.insert(0,"Enter minutes")
minutes.grid(row=0, column =2)
brrr = Label(root, text=":").grid(row=0, column =3)
seconds = Entry(root)
seconds.insert(0,"Enter seconds")
seconds.grid(row=0, column =4)
mylabel = Label(root, text=("Hello! there"))
mylabel.grid(row=3, column=2)
def zooda():
global h
global m
global s
h = int(hours.get())
s = int(seconds.get())
m = int(minutes.get())
mylabel.config(text=(h,":",m,":",s))
hours.delete(0, END)
minutes.delete(0, END)
seconds.delete(0, END)
if s!=0:
while s>-1:
s-=1
time.sleep(1)
mylabel.config(text=(h , ":" , m , ":" , s))
mylabel.after(1000, zooda)
if s==0:
if m!=0:
m-=1
s=59
time.sleep(1)
mylabel.config(text=( h , ":" , m , ":" , s))
mylabel.after(1000, zooda)
else:
if h!=0:
h-=1
m=59
s=59
time.sleep(1)
mylabel.config(text=( h , ":" , m , ":" , s))
mylabel.after(1000, zooda)
continue
else:
time.sleep(1)
mylabel.config(text=( "Time's Over"))
mylabel.after(1000, zooda)
playsound('/Users/commo/Desktop/beep.wav')
break
else:
if h>=1:
h-=1
m=59
s=60
while s>-1:
s-=1
time.sleep(1)
mylabel.config(text=( h , ":" , m , ":" , s))
mylabel.after(1000, zooda)
if s==0:
if m!=0:
m-=1
s=59
time.sleep(1)
mylabel.config(text=( h , ":" , m , ":" , s))
mylabel.after(1000, zooda)
else:
if h!=0:
h-=1
m=59
s=59
time.sleep(1)
mylabel.config(text=( h , ":" , m , ":" , s))
mylabel.after(1000, zooda)
continue
else:
time.sleep(1)
mylabel.config(text=( "Time's Over"))
mylabel.after(1000, zooda)
playsound('/Users/commo/Desktop/beep.wav')
break
else:
s=60
m-=1
while s>-1:
s-=1
time.sleep(1)
mylabel.config(text=( h , ":" , m , ":" , s))
mylabel.after(1000, zooda)
if s==0:
if m!=0:
m-=1
s=59
time.sleep(1)
mylabel.config(text=( h , ":" , m , ":" , s))
mylabel.after(1000, zooda)
else:
if h!=0:
h-=1
m=59
s=59
time.sleep(1)
mylabel.config(text=( h , ":" , m , ":" , s))
mylabel.after(1000, zooda)
continue
else:
time.sleep(1)
mylabel.config(text=( "Time's Over"))
mylabel.after(1000, zooda)
playsound('/Users/commo/Desktop/beep.wav')
break
button = Button(root, text="Start Timer", command=lambda:[ zooda()])
button.grid(row=1,column=2)
root.mainloop()
您可以使用“后”方法。 while 和 for 循环会停止您的程序,时间也会这样做。 使用已经存在的东西是有意义的。 例如 function 调用
from tkinter import Tk, Label
root = Tk()
def type_writer(text: str, count=0):
if count < len(text):
lbl.config(text=text[:count+1])
root.after(100, lambda : type_writer(text, count + 1))
txt = "Hello World"
lbl = Label()
lbl.pack()
type_writer(txt)
root.mainloop()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.