.after() 函数不会让秒表等待



我想用python创建一个stowatch。我试着利用时间。睡眠让程序等待一秒钟,这样它就会正常工作,但它没有工作,按钮(因为它是一个GUI应用程序在tkinter)一直在工作。所以我使用了.after函数,但应用程序现在也不工作了,当我试图关闭程序时,它没有回答。

我已经尽我最大的努力来修复这个问题,但是我是python的新手,我找不到问题。

def stop_app():
global stop
stop = 1

def start():
global series, minutes,seconds
minutes=25,
seconds=60
print(minutes, seconds)
while True :
if series==4:
break
seconds -=1
print (seconds, minutes)
if minutes == 00 and seconds ==00:
#dzwięk
minutes = 4
seconds=59
series +=1
if seconds ==00:
minutes-=1
seconds = 60
print (seconds, minutes, seria)
clock = tk.Label(root, height=1, background="#000000", foreground='white',
font=("Lemon Milk", 70), anchor=CENTER, text="00:00:00")
clock.place(x=120, y=90)
clock.after(1000,start)

我真的不明白你的代码正在做或试图做的一些事情,但下面是基于它的一些东西,显示了如何使用通用小部件after()方法在tkinter中做定时器的基本原理

一般来说,它取代显式循环,如您正在使用的while True:。它所做的是在指定的延迟之后安排对同一函数的另一次调用。停止循环"这很容易,只是在返回之前不要再调用after()

需要注意的另一件重要的事情是,用于显示时间的Label只创建一次,并且每次执行start()时都会更新。
import tkinter as tk
from tkinter.constants import *

def start():
global hours, minutes, seconds
if hours == 4:
return  # Stop timer.
seconds -= 1
if seconds == 00:
minutes -= 1
seconds = 60
if minutes == 00 and seconds == 00:
hours += 1
clock.config(text=f'{hours:02}:{minutes:02}:{seconds:02}')
root.after(1000, start)  # Call again in 1 second (1000 ms).

root = tk.Tk()
clock = tk.Label(root, height=1, background="#000000", foreground='white',
font=("Lemon Milk", 20), anchor=CENTER, text="00:00:00")
clock.place(relx=0.5, rely=0.5, anchor=CENTER)
hours, minutes, seconds = 0, 25, 60  # Initialize global variables.
start()
root.mainloop()

相关内容

  • 没有找到相关文章

最新更新