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

Geo*_*ouf 3 python user-interface tkinter messagebox

我想在按下“X”按钮关闭 GUI 时显示一个消息框对话框。我想问用户他是否确定要以是/否选择退出程序。在对话框中按“是”时出现错误,如果按“否”,GUI 将关闭。 这是完整的代码

这是我得到的错误:

self.tk.call('destroy', self._w)

_tkinter.TclError:无法调用“销毁”命令:应用程序已被销毁

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

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)
Run Code Online (Sandbox Code Playgroud)

AST*_*AST 5

您可以使用该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()
Run Code Online (Sandbox Code Playgroud)

更新

根据atexit模块的文档

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

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

此模块不适用于您尝试实现的用例,它通常用于应该在程序终止后执行任务的“清理”功能。

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