我是Python的新手,我正在尝试使用Tkinter创建一个餐厅模拟作为我的GUI(因为它很容易)。
我有一个使用名为Tick()
的函数的Timer(如下所示:)
def Tick(self,time,type,resto,foodname,Database):
if self.cookTimer.winfo_exists() is 1:
.....
else:
if self.cookTimer.winfo_exists() is 1:
self.timeLabel.configure(text="%d" %time)
self.cookTimer.after(1000, lambda: self.Tick(time,type,resto,foodname,Database))
self.cook.protocol("WM_DELETE_WINDOW", lambda: self.Callback(self.cook,resto,Database))
我要做的是在退出程序之前,它会首先询问用户是或否。
现在,在Tick()
中,根名为self.cookTimer
。
当用户退出self.cookTimer
时,self.timeLabel.configure
仍在运行,从而引发configure
需要root的错误。
任何人都可以告诉我,如果configure
被销毁,该程序如何运行cookTimer
,可以帮助我吗?
答案 0 :(得分:1)
Tkinter after
方法返回一个标识符,如果事实证明你不再需要它,可以用来取消预定的呼叫。一个很好的例子是设置超时调用。如果您的代码在超时内完成,则取消超时。在您的示例中,当您设置后续呼叫时,记录结果并使用该结果取消呼叫:
self.after_id = self.cookTimer.after(1000, lambda: ...)
....
self.after_cancel(self.after_id)
您可能想要创建一个清理方法,并让WM_PROTOCOL_DELETE和其他终止调用全部去那里进行清理并退出。