我正在尝试创建一个程序,当它启动时,会出现一个GUI窗口,并且倒计时从5到0。
这是代码:
SPTAudioStreamingController
程序启动时,会出现数字5,然后突然变为0.
有人可以告诉我代码中的问题是什么吗?
答案 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的例子。