如何获取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
相关产品推荐
相关产品推荐

