用Python和Tkinter做倒计时?

2024-06-06 21:33:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用倒计时功能在Tkinter中设置一个标签。现在它所做的就是一旦达到10,就将标签设置为“10”,我真的不明白为什么。而且,即使我把定时器打印到终端上,也会显示“时间到了!”比特从不打印。

import time
import tkinter as tk

class App():
    def __init__(self):
        self.root = tk.Tk()
        self.label = tk.Label(text="null")
        self.label.pack()
        self.countdown()
        self.root.mainloop()

    # Define a timer.
    def countdown(self):
        p = 10.00
        t = time.time()
        n = 0
        # Loop while the number of seconds is less than the integer defined in "p"
        while n - t < p: 
            n = time.time()
            if n == t + p:
                self.label.configure(text="Time's up!")
            else:
                self.label.configure(text=round(n - t))

app=App()

Tags: thetextimportselfapptimeconfiguredef
1条回答
网友
1楼 · 发布于 2024-06-06 21:33:41

Tkinter已经有一个无限循环在运行(事件循环),并且有一种方法可以在经过一段时间后(使用after)调度要运行的东西。您可以利用这个优势,编写一个每秒调用一次自身的函数来更新显示。可以使用类变量来跟踪剩余时间。

import Tkinter as tk

class ExampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.label = tk.Label(self, text="", width=10)
        self.label.pack()
        self.remaining = 0
        self.countdown(10)

    def countdown(self, remaining = None):
        if remaining is not None:
            self.remaining = remaining

        if self.remaining <= 0:
            self.label.configure(text="time's up!")
        else:
            self.label.configure(text="%d" % self.remaining)
            self.remaining = self.remaining - 1
            self.after(1000, self.countdown)

if __name__ == "__main__":
    app = ExampleApp()
    app.mainloop()

相关问题 更多 >