You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:43:00