Tkinter:根已被销毁后,仍会调用'after'函数

用户名

我是Python的新手,我正尝试使用Tkinter作为我的GUI创建一个餐厅模拟(因为这很容易)。

我有一个使用称为的函数的计时器Tick()(如下所示:)

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.cookTimerself.timeLabel.configure它仍在运行,从而引发configure需要root用户的错误

有人可以通过告诉我如何使程序configurecookTimer被破坏时不运行来帮助我吗?

爱国者

after如果事实证明您不再需要该计划调用,则Tkinter方法将返回一个标识符,该标识符可用于取消该计划调用。超时呼叫就是一个很好的例子。如果您的代码在超时内完成,则您可以取消超时。在您的示例中,当您设置after呼叫时,记录结果并将其用于取消呼叫:

self.after_id = self.cookTimer.after(1000, lambda: ...)
....
self.after_cancel(self.after_id)

您可能要创建一个清理方法,并让WM_PROTOCOL_DELETE和其他终止调用都去那里进行清理并退出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Tkinter:使函数定期使用after()运行

来自分类Dev

Tkinter after() 函数显示异常行为

来自分类Dev

JavaScript:在创建的对象上将变量设置为新函数,它仍会调用旧函数

来自分类Dev

事件触发后如何测试函数已被调用?

来自分类Dev

销毁所有对象后调用PHP函数

来自分类Dev

不会调用attrTween函数

来自分类Dev

不会调用Javascript函数

来自分类Dev

tkinter中的调用函数

来自分类Dev

tkinter中的调用函数

来自分类Dev

为什么cd会调用函数':'?

来自分类Dev

按钮onclick不会调用javascript函数

来自分类Dev

UIButton 按下不会调用函数

来自分类Dev

在函数内调用函数

来自分类Dev

从函数内部调用函数

来自分类Dev

从函数内部调用函数

来自分类Dev

从函数内部调用函数?

来自分类Dev

从函数python调用函数

来自分类Dev

如何在两个函数Tkinter中使用root.after python

来自分类Dev

HTML按钮的onclick属性不会调用该函数,更改后的行为会很奇怪

来自分类Dev

Javascript、CSS、按钮在第一次点击后不会调用动画函数

来自分类Dev

while循环和after之后重复调用函数之间的区别

来自分类Dev

将参数传递给函数调用时出现“SyntaxError: non-keyword arg after keyword arg”

来自分类Dev

在对象销毁期间调用的函数

来自分类Dev

销毁对象时调用回调函数

来自分类Dev

调用[[noreturn]]函数和销毁顺序

来自分类Dev

在对象销毁期间调用的函数

来自分类Dev

Tkinter - 按下按钮后调用带参数的函数

来自分类Dev

类中的Tkinter调用函数

来自分类Dev

Tkinter,使用参数调用函数