Tkinter父子窗口管理问题:如何实现子窗口聚焦等三项需求
Tkinter子窗口需求解决方案
要同时满足子窗口获焦点、禁用父窗口交互、关闭父窗口时同步关闭子窗口这三个条件,将transient()、grab_set()和focus_set()结合使用即可,以下是调整后的代码:
from tkinter import * from tkinter.ttk import * master = Tk() master.geometry("200x200") def openNewWindow(): newWindow = Toplevel(master) newWindow.geometry("200x200") Label(newWindow, text="This is a new window").pack() # 绑定子窗口到父窗口,父窗口关闭时子窗口自动销毁 newWindow.transient(master) # 锁定所有交互到子窗口,禁用父窗口操作 newWindow.grab_set() # 让子窗口获得输入焦点 newWindow.focus_set() label = Label(master, text="This is the main window") label.pack(pady=10) btn = Button(master, text="Click to open a new window", command=openNewWindow) btn.pack(pady=10) mainloop()
关键方法说明
transient(master):将子窗口设为父窗口的临时从属窗口,父窗口关闭时子窗口会被自动关闭,同时子窗口的窗口层级会依附于父窗口。grab_set():让子窗口捕获所有用户输入事件,此时父窗口的所有控件都会被禁用,无法进行交互。focus_set():强制将输入焦点切换到子窗口,确保子窗口打开后立即处于活跃状态。
这样调整后,完全符合你提出的三个要求。
内容的提问来源于stack exchange,提问作者Jakub
相关产品推荐
相关产品推荐

