Получить список Toplevels на Tkinter - PullRequest
0 голосов
/ 01 апреля 2020

Я хотел знать, есть ли простой способ получить все верхние уровни из определенного окна c, включая верхние уровни внутри верхних уровней. В следующем коде я оставляю пример того, что я хочу сделать:

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 для выполнения sh этого?

1 Ответ

2 голосов
/ 01 апреля 2020

Каждый виджет имеет список своих дочерних элементов, и с помощью рекурсии вы можете получить все виджеты.

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
...