基本Tkinter倒数计时器

时间:2015-12-01 20:10:27

标签: python timer tkinter countdown

我目前正在开发一个需要非常简单的倒数计时器的项目,该计时器可以在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()

2 个答案:

答案 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),这可以变得更加优雅,但我认为你可以在这里明白这一点。