用 Python 和 Tkinter 制作倒数计时器?
Posted
技术标签:
【中文标题】用 Python 和 Tkinter 制作倒数计时器?【英文标题】:Making a countdown timer with Python and Tkinter? 【发布时间】:2012-05-22 17:50:47 【问题描述】:我想使用我的倒计时功能在 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()
【问题讨论】:
这是code example of a countdown implemented using Tkinter 【参考方案1】: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()
【讨论】:
这解释了很多,谢谢。我想知道为什么即使我用几种不同的方式重写了最后一项,它也只会在到达最后一项后更新。 @RyanHasse:只有当 Tkinter 可以响应告诉它更新显示的事件时,才会更新显示。这些事件仅由事件循环处理。如果你有自己的循环,它会饿死事件循环,阻止重绘请求的发生。以上是关于用 Python 和 Tkinter 制作倒数计时器?的主要内容,如果未能解决你的问题,请参考以下文章