【发布时间】:2021-10-28 09:07:39
【问题描述】:
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")
#some widgets inside top2
top2 = tk.Toplevel(top1)
top2.title("B")
print(top1.winfo_toplevel(), top1.winfo_children())
r.mainloop()
我只想获得top1 的顶级,而不是其他,即.!frame.!toplevel.!toplevel
winfo_toplevel() 返回.!frame.!toplevel
winfo_children() 返回.!frame.!toplevel.!toplevel,...所有孩子
【问题讨论】:
-
所以
top1.winfo_children()[0]? -
无论如何你都不能得到
.!frame.!toplevel.!toplevel,因为top1是Toplevel,它的父级是Frame而不是Toplevel。您可以使用top1.master.winfo_toplevel()获取根窗口(@987654334@)。 -
@HenryYik 但它不一定在索引 0 之前和之后可能有小部件。
-
@acw1668
top1.master.winfo_toplevel()为什么这给root,为什么top1.winfo_toplevel()给.!frame.!toplevel我很困惑 -
如果
widget是Toplevel,widget.winfo_toplevel()将返回自身,否则返回包含widget的Toplevel。所以top1.winfo_toplevel()将返回自身,即.!frame.!toplevel。top1.master是f,所以top1.master.winfo_toplevel()与返回根窗口的f.winfo_toplevel()相同。