在Python中使用Tkinter退出时的消息框对话框



我想在按下"X"时显示一个消息框对话框。按钮关闭GUI。我想询问用户是否确定要退出程序并选择是/否。当我按下"Yes"在对话框中,如果我按下&;no &;, GUI就会关闭。这是完整的代码

这是我得到的错误:

self.tk。调用(‘毁灭’,self._w)

_tkinter。TclError:无法调用&;destroy&;命令:应用程序已被销毁

这是我到目前为止所做的:

import atexit
def deleteme():
result = messagebox.askquestion("Exit", "Are You Sure You Want to Exit?")
if result == "yes":
root.destroy()
else:
return None
atexit.register(deleteme)

您可以使用protocol方法将窗口删除与函数绑定。

from tkinter import *
from tkinter import messagebox
def on_close():
response=messagebox.askyesno('Exit','Are you sure you want to exit?')
if response:
root.destroy()
root=Tk()
root.protocol('WM_DELETE_WINDOW',on_close)
root.mainloop()

根据atexit模块的文档

这样注册的函数在正常解释器终止时自动执行。

注册的函数在mainloop被销毁后被调用(因为没有任何进展,它标志着程序的结束)。函数试图销毁的GUI元素已经不存在了,正如错误提示的那样。

这个模块不是为你想要实现的用例准备的,它通常用于"清理"。在程序终止后执行任务的函数。

通过WM_DELETE_WINDOW协议注册的回调使您可以控制当窗口被指示关闭时发生的事情。

只是为了添加@AST的答案:

您正在尝试使用atexit库阻止在程序试图退出时关闭tkinter窗口。问题是atexit库在销毁窗口后调用函数。我甚至不认为你可以阻止你的程序退出使用atexit。这就是为什么@AST建议使用root.protocol("WM_DELETE_WINDOW", on_close),它在tkinter窗口试图关闭时运行(仅当用户按下"X"时才有效)。

按钮)。

相关内容

  • 没有找到相关文章

最新更新