在基于现有的小部件构建我自己的小部件时,我一直在为我的每个小部件类添加一个“名称”字段,以便以后更容易访问,例如:
class MyFrame(tk.Frame):
def __init__(self, master, name, *args, *kwargs):
super().__init__(master, *args, *kwargs)
self.name = name
设置整个窗口布局后,我可以执行以下操作:
mywidget = allWidgets['myWidgetName']
但我忍不住想知道是否有更好的方法,使用小部件的内置属性,而不添加新标签。我知道 winfo_children()
有助于遍历小部件树,但我确实需要随机访问。
最佳答案
根据@BryanOakley的提示,我终于发现所有Tkinter小部件都有一个._name
属性,默认值为!<classname>
,即使类名使用大小写混合,也全部小写。
然后我可以将任何名称分配给 ._name
实例化我的小部件类后。
可以理解的是,这个细节不在官方文档中,因为这不是公共(public)界面的一部分,但知道这一点立即为我自己的工作节省了内存。
但是,我想如果我开始使用它,维护小部件名称的唯一性将是我自己的责任。
谈到 Tkinter 时,我必须感谢 Bryan 一百万,感谢他的足智多谋。
关于python - tkinter:标记任意小部件以进行检索的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53927636/