如何获取窗口中的所有对象 - 及其设置

ber*_*til 0 python tkinter

这个想法是获取所有按钮、标签、输入字段的信息......给定窗口的树视图。有了这些信息,就可以关闭所有按钮或隐藏名称以“xx”开头的所有输入字段。将想法可视化的最佳方法是树状视图,例如:

\window
     \Frame1
         \button1(Name,x,y ...)
         \button2(..)
      \Frame2
Run Code Online (Sandbox Code Playgroud)

直到现在我找到了信息的最后一部分

    from tkinter import Button
    b = Button()
    for k in b.configure().keys():
            print (k, ':', b.cget(k))

    from tkinter import Listbox
    li = Listbox()
    for k in li.configure().keys():
            print (k, ':', li.cget(k))
Run Code Online (Sandbox Code Playgroud)

但是如何对窗口的所有元素进行迭代?我没有找到类似 typeof(button) == true ... 或 typeof(object) -> Button ...

Bry*_*ley 5

您可以使用widget.winfo_children()来获取widget. 的直接后代的所有小部件的列表。

给定对小部件的引用,您可以调用widget.keys()以获取小部件的所有可配置选项的列表。您可以使用该cget方法获取值(例如:)widget.cget("background")

您可以使用winfo_class小部件(例如:)获取小部件的内部 tkinter 类型或类widget.winfo_class()

  • @bertil:“真实姓名”是什么意思?如果您想获取指向小部件的变量的名称,则无法获取该信息。您可以轻松地将多个变量(或根本没有变量)与一个小部件关联。话虽如此,您可以使用“name”参数为小部件指定一个名称,该名称就是“winfo_name”将返回的名称(例如:“Label(root, name='my label')” (2认同)