如何检测CustomTkinter中CTkToplevel窗口是否已关闭?
检测CTkToplevel窗口是否关闭的实现方法
CustomTkinter的CTkToplevel继承自Tkinter原生的Toplevel组件,可直接使用Tkinter原生机制检测窗口关闭状态,以下是两种可行方案:
方案一:绑定窗口关闭事件
通过protocol方法绑定WM_DELETE_WINDOW事件,精准捕获用户关闭窗口的动作,触发自定义逻辑。
修改后的示例代码:
import customtkinter class App(customtkinter.CTk): def __init__(self): super().__init__() self.extra_window = Extra(self) # 传入主窗口实例,方便跨窗口交互 self.mainloop() class Extra(customtkinter.CTkToplevel): def __init__(self, parent, *args, **kwargs): super().__init__(parent, *args, **kwargs) self.parent = parent self.geometry("400x300") self.label = customtkinter.CTkLabel(self, text="ToplevelWindow") self.label.pack(padx=20, pady=20) # 绑定窗口关闭事件到自定义方法 self.protocol("WM_DELETE_WINDOW", self.on_close) def on_close(self): # 添加窗口关闭时需执行的逻辑 print("Extra窗口已关闭") # 销毁窗口实例 self.destroy() # 通知主窗口清除引用 self.parent.extra_window = None App()
方案二:定时检查窗口存在状态
使用winfo_exists()方法定时检查窗口是否存活,适合需要持续监控窗口状态的场景。
示例代码:
import customtkinter class App(customtkinter.CTk): def __init__(self): super().__init__() self.extra_window = Extra() # 启动定时检查,每隔1秒执行一次 self.check_window_status() self.mainloop() def check_window_status(self): # 检查窗口实例是否存在且未被销毁 if self.extra_window and not self.extra_window.winfo_exists(): print("Extra窗口已关闭") self.extra_window = None # 设置下一次检查 self.after(1000, self.check_window_status) class Extra(customtkinter.CTkToplevel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.geometry("400x300") self.label = customtkinter.CTkLabel(self, text="ToplevelWindow") self.label.pack(padx=20, pady=20) App()
两种方案差异:
- 绑定事件方案为主动触发,窗口关闭瞬间立即执行操作,适合需响应关闭动作的场景;
- 定时检查方案为被动轮询,适合持续跟踪窗口状态的场景,可根据需求调整检查间隔(示例为1秒)。
内容的提问来源于stack exchange,提问作者Another_coder
相关产品推荐
相关产品推荐

