是否可以在Tkinter中按名称搜索小部件?

gri*_*yvp 5 python tkinter

如果我在Tkinter中创建一个小部件,我可以指定参与tcl/tk"小部件路径"概念的小部件名称.例如:

from Tkinter import *
button = Button( Frame( Tk(), name = "myframe" ), name = "mybutton" )
str( button ) == ".myframe.mybutton"
Run Code Online (Sandbox Code Playgroud)

是否有可能通过它的名字获取一个小部件,在我的例子中是"mybutton"?

jsb*_*eno 7

是的,但您必须保留对根"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>
Run Code Online (Sandbox Code Playgroud)


tzo*_*zot 5

每个Tkinter小部件都有一个属性children,该属性是widget name?的字典。widget instance。鉴于此,可以通过以下方式找到任何子部件:

widget.children['subwidget_name'].children['subsubwidget_name'] # ...
Run Code Online (Sandbox Code Playgroud)

  • 除了使用 `widget.children['foo']`,你可以使用 `widget.nametowidget('foo')` 来不依赖属性 dict。`nametowidget` 在内部查询该属性。 (2认同)