我目前正在开发一个需要非常简单的倒数计时器的项目,该计时器可以在tkinter GUI中使用,并且不依赖于递归。我尝试了不同的东西,但到目前为止似乎没有任何工作。
import time
from tkinter import *
root = Tk()
root.title("Timer")
root.geometry("100x100")
def countdown(count):
label = Label(root, text= count)
label.place(x=35, y=15)
for i in range(5,0,-1):
countdown(i)
time.sleep(1)
root.mainloop()
答案 0 :(得分:4)
您无法使用sleep
,因为它会停止mainloop
并且程序无法正常运行。您可以使用root.after
在1000毫秒(1秒)后调用函数
import tkinter as tk
def countdown(count):
# change text in label
label['text'] = count
if count > 0:
# call countdown again after 1000ms (1s)
root.after(1000, countdown, count-1)
root = tk.Tk()
label = tk.Label(root)
label.place(x=35, y=15)
# call countdown first time
countdown(5)
# root.after(0, countdown, 5)
root.mainloop()
答案 1 :(得分:1)
与furas的解决方案已经发布的类似原则,但是使用StringVar:
import Tkinter
def button_countdown(i, label):
if i > 0:
i -= 1
label.set(i)
root.after(1000, lambda: button_countdown(i, label))
else:
close()
def close():
root.destroy()
root = Tkinter.Tk()
counter = 10
button_label = Tkinter.StringVar()
button_label.set(counter)
Tkinter.Button(root, textvariable=button_label, command=close).pack()
button_countdown(counter, button_label)
root.mainloop()
如果这些作品属于同一类(即不需要lambda
),这可以变得更加优雅,但我认为你可以在这里明白这一点。