[英]Message Box Dialog at Exit using Tkinter in Python
我想在按下“X”按鈕關閉 GUI 時顯示一個消息框對話框。 我想問用戶他是否確定他想用是/否選擇退出程序。 在對話框中按“是”時出現錯誤,如果按“否”則 GUI 關閉。 這是完整的代碼
這是我得到的錯誤:
self.tk.call('destroy', 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
方法將 window 刪除與 function 綁定。
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
在主循環被破壞后被調用(因為沒有任何進展,它標志着程序的結束)。 function 試圖破壞的 GUI 元素不再存在,如錯誤所述。
該模塊不適用於您嘗試實現的用例,它通常用於應該在程序終止后執行任務的“清理”功能。
通過WM_DELETE_WINDOW
協議注冊的回調使您可以控制 window 被指示關閉時發生的情況。
只是添加到@AST的答案:
當程序嘗試退出時,您正在嘗試使用atexit
庫來阻止關閉 tkinter window。 問題是atexit
庫在 window 被銷毀后調用您的 function 。 我什至不認為您可以使用atexit
阻止程序退出。 這就是為什么@AST 建議使用在 tkinter window 試圖關閉時運行的root.protocol("WM_DELETE_WINDOW", on_close)
(僅在用戶按下“X”按鈕時有效)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.