在Tkinter中可以按名称搜索小部件吗?
如果我在Tkinter中创建一个小部件,我可以指定一个小部件的名称,这个名称会参与到tcl/tk的“小部件路径”概念中。举个例子:
from Tkinter import *
button = Button( Frame( Tk(), name = "myframe" ), name = "mybutton" )
str( button ) == ".myframe.mybutton"
在我的例子中,能不能通过名称“mybutton”来获取这个小部件呢?
2 个回答
8
每个Tkinter的控件都有一个叫做children
的属性,这个属性是一个字典,里面存储着控件名称
和控件实例
之间的对应关系。也就是说,你可以通过这个字典找到任何子控件,方法如下:
widget.children['subwidget_name'].children['subsubwidget_name'] # ...
16
是的,不过你需要保存一个指向根 Tk
实例的引用。你可以使用 Tk.nametowidget()
这个方法来实现:
>>> from Tkinter import *
>>> win = Tk()
>>> button = Button( Frame( win, name = "myframe" ), name = "mybutton" )
>>> win.nametowidget("myframe.mybutton")
<Tkinter.Button instance at 0x2550c68>