繁体   English   中英

Python/tkinter 计时器不更新 label --- 新手

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM