Python 获取Tkinter上的顶级级别列表
我想知道是否有一种简单的方法可以从特定的窗口获取所有顶级,包括顶级中的顶级。在下面的代码中,我留下了一个我想做的示例:Python 获取Tkinter上的顶级级别列表,python,tkinter,toplevel,Python,Tkinter,Toplevel,我想知道是否有一种简单的方法可以从特定的窗口获取所有顶级,包括顶级中的顶级。在下面的代码中,我留下了一个我想做的示例: from tkinter import Tk, Toplevel v = Tk() v2 = Toplevel(v) v3 = Toplevel(v2) v4 = Toplevel(v2) def toplevels(ventana): print("Here I return the list of all toplevels, in case of choosi
from tkinter import Tk, Toplevel
v = Tk()
v2 = Toplevel(v)
v3 = Toplevel(v2)
v4 = Toplevel(v2)
def toplevels(ventana):
print("Here I return the list of all toplevels, in case of choosing the main window, it should return:")
print()
print(".")
print(".toplevel")
print(".toplevel.toplevel")
print(".toplevel.toplevel2")
toplevels(v)
Tkinter中是否内置了一些东西来实现这一点?每个小部件都有其子部件的列表,使用递归可以获得所有小部件
from tkinter import Tk, Toplevel, Label
v = Tk()
v2 = Toplevel(v)
v3 = Toplevel(v2)
v4 = Toplevel(v2)
Label(v)
Label(v2)
Label(v3)
Label(v4)
def toplevels(ventana):
for k, v in ventana.children.items():
if isinstance(v, Toplevel):
print('Toplevel:', k, v)
else:
print(' other:', k, v)
toplevels(v)
toplevels(v)
结果
Toplevel: !toplevel .!toplevel
Toplevel: !toplevel .!toplevel.!toplevel
other: !label .!toplevel.!toplevel.!label
Toplevel: !toplevel2 .!toplevel.!toplevel2
other: !label .!toplevel.!toplevel2.!label
other: !label .!toplevel.!label
other: !label .!label
每个小部件都有其子部件的列表,使用递归可以获得所有小部件
from tkinter import Tk, Toplevel, Label
v = Tk()
v2 = Toplevel(v)
v3 = Toplevel(v2)
v4 = Toplevel(v2)
Label(v)
Label(v2)
Label(v3)
Label(v4)
def toplevels(ventana):
for k, v in ventana.children.items():
if isinstance(v, Toplevel):
print('Toplevel:', k, v)
else:
print(' other:', k, v)
toplevels(v)
toplevels(v)
结果
Toplevel: !toplevel .!toplevel
Toplevel: !toplevel .!toplevel.!toplevel
other: !label .!toplevel.!toplevel.!label
Toplevel: !toplevel2 .!toplevel.!toplevel2
other: !label .!toplevel.!toplevel2.!label
other: !label .!toplevel.!label
other: !label .!label
在开始时创建列表,并手动将每个顶层添加到此列表<代码>所有顶级。附加(v)我要找的函数是要放在一个模块中的,但我可能会把你的想法作为最后的手段。谢谢。每个小部件都有儿童小部件的列表,所以您可以获取此列表并检查每个儿童的类型。您必须使用递归来检查每个项中的每个子项。是的,但是您所说的函数(
winfo_children
)不会返回所有顶级,只返回与窗口关联的顶级。例如v.winfo_children()
将只返回到v2
,而不是v3
和v4
。关于递归,这就是我试图看到的。我想问的是是否有一种更简单的方法。在开始时创建列表,然后手动将每个顶层添加到此列表中<代码>所有顶级。附加(v)我要找的函数是要放在一个模块中的,但我可能会把你的想法作为最后的手段。谢谢。每个小部件都有儿童小部件的列表,所以您可以获取此列表并检查每个儿童的类型。您必须使用递归来检查每个项中的每个子项。是的,但是您所说的函数(winfo_children
)不会返回所有顶级,只返回与窗口关联的顶级。例如v.winfo_children()
将只返回到v2
,而不是v3
和v4
。关于递归,这就是我试图看到的。我想问的是是否有一种更简单的方法。现在我明白了递归的真正含义。谢谢你的代码。现在我明白了递归的真正含义。谢谢你的密码。