我的倒计时程序效果不佳

时间:2016-03-25 18:52:05

标签: python tkinter

我正在尝试创建一个程序,当它启动时,会出现一个GUI窗口,并且倒计时从5到0。

这是代码:

SPTAudioStreamingController

程序启动时,会出现数字5,然后突然变为0.

有人可以告诉我代码中的问题是什么吗?

2 个答案:

答案 0 :(得分:2)

root.after(1000, self.update)不会自行等待。它将self.update放入主循环稍后检查的队列中。您将self.update放入队列中,然后继续循环。在I为零生效的1来电之前,您可以将5设置为从.after(...)I的每个号码。不要在I循环中设置create_widget(),而是将其放入update()

def create_widget(self):
    ...
    self.number = number
    root.after(1000, self.update)
def update(self):
    self.lbl1.configure(text=self.number)
    self.number -= 1
    if self.number:
        root.after(1000, self.update)

答案 1 :(得分:1)

您创建5个更新回调,在1秒内执行。全部5触发并更新为number的最终值,即0.将print(number)放入回调中查看。

您需要创建1个回调并在更新功能中有条件地创建另一个回调。以下内容从IDLE编辑器或带有python -m filename.py

的终端运行
from tkinter import *

class application(Frame):
    def __init__(self, master, number):
        Frame.__init__(self, master)
        self.master = master
        self.number = number
        self.grid()
        self.create_widget()
    def create_widget(self):
        self.lbl1 = Label(self, text=self.number)
        self.lbl1.grid(row=0, column=0, sticky=W)
        self.master.after(1000, self.update)
    def update(self):
        if self.number:
            self.number -= 1
            self.lbl1.configure(text=self.number)
            self.master.after(1000, self.update)

root = Tk()
number=5
app = application(root, number)

在SO上还有很多其他正确使用root.after的例子。