简体   繁体   English

如何在 tkinter 中进行简单的倒计时?

[英]How do I make a simple countdown time in tkinter?

I am making a simple countdown timer in minutes.我正在几分钟内制作一个简单的倒数计时器。 I can't seem to display the countdown in text label.我似乎无法在文本标签中显示倒计时。 Can someone help me?有人能帮我吗?

import tkinter as tk
import time

def countdown(t):
    while t:
        mins, secs = divmod(t, 60)
        timeformat = '{:02d}:{:02d}'.format(mins, secs)
        print(timeformat, end='\r')
        label.config(text=timeformat)
        time.sleep(1)
        t -= 1

root = tk.Tk()
label = tk.Label(root,text="Time")
label.pack()
button = tk.Button(root,text = "click here", command=countdown(60)).pack()

root.mainloop()

First of all, instead of using this首先,而不是使用这个

button = tk.Button(root,text = "click here", command=countdown(60)).pack()

You have to use lambda to specify arguments您必须使用lambda来指定参数

button = tk.Button(root,text = "click here", command=lambda:countdown(60)).pack()

Then you have to update root each time you update the label然后每次更新标签都得更新root

def countdown(t):
while t:
    mins, secs = divmod(t, 60)
    timeformat = '{:02d}:{:02d}'.format(mins, secs)
    print(timeformat, end='\r')
    label.config(text=timeformat)
    root.update() #This way your program will display the numbers.
    time.sleep(1)
    t -= 1

Also I recommend to use Threads, to be able to use other buttons while your program is running.此外,我建议使用线程,以便在程序运行时能够使用其他按钮。

Requested code:请求的代码:

import threading
import tkinter as tk
import time
import sys

runtime = 300 #In seconds, you can change this

class CountdownApp:
    def __init__(self, runtime):
        self.runtime = runtime
        self._createApp()
        self._packElements()
        self._startApp()

    def _createApp(self):
        self.root = tk.Tk()

    def _packElements(self):
        self.label = tk.Label(self.root,text="Time")
        self.label.pack()
        self.button = tk.Button(self.root,text = "click here", command=self.startCounter)
        self.button.pack()

    def countdown(self):
        self.t = self.runtime
        self.button.config(state='disabled')
        while self.t > -1:
            self.mins, self.secs = divmod(self.t, 60)
            self.timeformat = '{:02d}:{:02d}'.format(self.mins, self.secs)
            self.label.config(text=self.timeformat)
            self.root.update()
            time.sleep(1)
            self.t -= 1
        self.label.config(text='Time')
        self.root.update()
        self.button.config(state='normal')

    def startCounter(self):
        threading.Thread(target=self.countdown).start()

    def _startApp(self):
        self.root.mainloop()


CountdownApp(runtime)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM