我正在尝试用Tkinter构建一个小的Python GUI应用程序。当应用程序打开时,将打开一个主窗口。然后你可以点击一个按钮打开一个新的顶层。在这个顶层,有一个定时器(倒计时)在按下按钮时启动。在
我的问题是,当计时器倒计时时,顶层冻结。我可能错过了一些关于Tkinter如何工作(以及如何构造代码)的基本知识。我希望你能澄清为什么代码没有按预期工作。在
from tkinter import *
class Application:def __init__(self, master=NONE):
self.root = Tk()
btnTimer = Button(self.root, text="Open timer", command=self.open_timer)
btnTimer.grid(row=1, column=0)
self.root.mainloop()
def open_timer(self):
# Hide main window
self.root.withdraw() # Hide main window
# Make window for controls
self.wdowControl = Toplevel(self.root)
# Timer
self.wdowControl.timerText = Label(self.wdowControl, text="00:00:00", font=("Helvetica", 80))
self.wdowControl.timerText.grid(row=0, column=0)
btnStart = Button(self.wdowControl, text="Start timer", command=self.start_timer)
btnStart.grid(row=1, column=0)
def start_timer(self):
self.update_timer(5) # Timer in seconds
def update_timer(self, t):
if t > 0:
m, s = divmod(t, 60)
h, m = divmod(m, 60)
timeLeft = "%d:%02d:%02d" % (h, m, s)
self.wdowControl.timerText.configure(text=timeLeft)
t -= 1
self.wdowControl.after(1000, self.update_timer(t))
else:
self.wdowControl.timerText.configure(text="00:00:00", fg='red')
app = Application())
注意:我昨天开始用Python编写代码,我可能还没有从应该首先学习的基本知识开始。但这让我很开心。:)
在以下行中使用after时
函数正在被直接调用。这意味着你的程序冻结了,因为它只是一次又一次地调用自己。在
要像在本例中使用
^{pr2}$after
传递变量,可以在函数名后使用另一个逗号来指定它。因此,要修复程序,您需要将我提到的行改为:希望这有帮助!在
相关问题 更多 >
编程相关推荐