簡體   English   中英

檢查 tkinter window 何時關閉

[英]Check when tkinter window closes

from tkinter import *

root = Tk()
root.geometry("400x400")
if not 'normal' == root.state():
    print('just closed')

root.mainloop()

我想檢查這個 tkinter window 是否關閉, print('just closed')是否被執行。 我也嘗試過使用 while 循環來執行此操作,但這不起作用,因為它沒有到達root.mainloop()

還有另一種方法可以檢測 window 何時關閉,即將 function 綁定到<Destroy>事件。 但是,對於Tk小部件(例如,與FrameButton不同), .bind()也綁定到所有小部件的孩子,因此只需使用

root.bind("<Destroy>", lambda event: print('just closed'))

不會產生預期的結果。 實際上,將打印“剛剛關閉”以銷毀 window 中的每個小部件。 為了避免這種情況,我們可以檢查觸發事件的小部件確實是主要的 window:

def on_destroy(event):
    if event.widget != root:
        return
    print("just closed")

這是一個例子:

import tkinter as tk

root = tk.Tk()
tk.Label(root, text="Some text").pack(padx=10, pady=10)
tk.Button(root, text="Quit", command=root.destroy).pack(padx=10, pady=10)

def on_destroy(event):
    if event.widget != root:
        return
    print("just closed")

root.bind("<Destroy>", on_destroy)
root.mainloop()

僅將 print 語句放在mainloop()之后

from tkinter import *

root = Tk()
root.geometry("400x400")

root.mainloop()
print('just closed')

我在這里找到了另一個解決方案:

from tkinter import *

root = Tk()
root.geometry("400x400")

root.protocol("WM_DELETE_WINDOW", lambda: print('just closed'))

root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM