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

如何获取tkinter中指定Toplevel的子级Toplevel窗口路径?

解决方案

你可以对winfo_children()返回的子控件列表做类型过滤,筛选出tk.Toplevel类型的对象后直接获取其路径即可,实现代码如下:

import tkinter as tk


r = tk.Tk()
r.title("root")
r.geometry("200x200")
f =tk.Frame(r)
f.pack()

top1 = tk.Toplevel(f)
top1.title("A")

top2 = tk.Toplevel(top1)
top2.title("B")  

# 新增逻辑:筛选top1的子Toplevel
for child in top1.winfo_children():
    # 匹配控件类型为Toplevel
    if isinstance(child, tk.Toplevel):
        # 直接打印控件对象即可输出路径,也可调用winfo_pathname显式获取
        print("目标子Toplevel路径:", str(child))
        # 额外可加标题匹配逻辑,应对top1下有多个子Toplevel的场景
        # if child.title() == "B":
        #     print(str(child))

r.mainloop()

运行上述代码即可输出你需要的.!frame.!toplevel.!toplevel路径。

原方法不生效的原因说明

  • winfo_toplevel()的作用是获取当前控件所属的顶层窗口根节点,你对top1调用该方法,自然只会返回top1本身的路径,无法获取它的子控件。
  • winfo_children()已经返回了包含目标Toplevel在内的所有子控件,只需补充一层类型过滤即可精准拿到你需要的对象,不需要额外调用其他特殊接口。

如果你的场景中top1下只会有一个子Toplevel,也可以在创建时直接为top1绑定自定义属性存储子Toplevel对象,后续直接取值即可,无需遍历:

top2 = tk.Toplevel(top1)
top1.child_toplevel = top2
# 后续取值
print(str(top1.child_toplevel))

内容的提问来源于stack exchange,提问作者Bind

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:15:06