Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基本Tkinter倒计时计时器_Python_Timer_Tkinter_Countdown - Fatal编程技术网

Python 基本Tkinter倒计时计时器

Python 基本Tkinter倒计时计时器,python,timer,tkinter,countdown,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.pla

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

您不能使用
sleep
,因为它会停止
mainloop
,并且程序无法工作。您可以使用
root.after
在1000ms(1s)后调用函数


与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
),这会变得更加优雅,但我认为你可以理解这一点。

sleep
会让窗户锁上。尝试使用
根目录。在
之后。相关:
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()