Tkinter实现仅在窗口未打开时新建窗口,已打开则前置显示
解决Tkinter按钮仅创建一次窗口并前置的问题
要实现点击按钮时仅在窗口未打开时创建新窗口,已打开则将其前置,核心是追踪Toplevel窗口的实例状态,以下是修改后的代码:
def main(): main_bg = "Gray" main_fg = "White" import tkinter as tk employees = [] window = tk.Tk() window.configure(bg=main_bg) window.title("Business app") window.geometry("1100x650") # 初始化窗口实例变量,用于追踪Toplevel窗口状态 random_window = None def open_new_window(): nonlocal random_window # 检查窗口是否未创建或已被销毁 if random_window is None or not random_window.winfo_exists(): random_window = tk.Toplevel(window) random_window.configure(bg=main_bg) random_window.geometry("600x600") # 绑定关闭事件,重置实例变量,确保下次点击可重新创建 def on_window_close(): nonlocal random_window random_window.destroy() random_window = None random_window.protocol("WM_DELETE_WINDOW", on_window_close) else: # 将已存在的窗口前置并获取焦点 random_window.lift() random_window.focus_force() random_button = tk.Button(window, text="Do Something", font="Times 32", bg=main_bg, fg=main_fg, command=open_new_window) random_button.pack() window.mainloop() if __name__ == "__main__": main()
关键改动说明
- 使用
nonlocal关键字让内部函数访问外部的random_window变量,实现状态追踪 - 通过
winfo_exists()方法判断窗口是否已被用户关闭 - 调用
lift()将窗口前置到最上层,focus_force()确保窗口获得输入焦点 - 绑定
WM_DELETE_WINDOW协议,在用户关闭Toplevel窗口时重置实例变量,保证下次点击可重新创建窗口
内容的提问来源于stack exchange,提问作者Ali Alizade
相关产品推荐
相关产品推荐

