我怎样才能找到小部件的Toplevel容器?

时间:2017-02-05 17:32:01

标签: tkinter python-3.5 introspection

像往常一样,我创建了深层嵌套的小部件框架,有时可以创建其他Toplevels。 <删除>帧。

当我创建一个新的Toplevel 框架时,我想存储创建新Toplevel的原始Toplevel 框架但是因为创建它的按钮深深嵌套在自己的框架内,并且不知道它在Toplevel的层次结构中的位置,它如何发现它的Toplevel容器将其传递到其他地方?

我是否必须事先将其存储在某种全局属性中,或者是否有办法通过使用一些内省来找到它?

调用 any_widget._root()让我回到根容器(tkinter.Tk实例)......是否有一个令人惊讶的未记录的 widget._toplevel 方法?

编辑:删除(以供将来参考)单词 frame ,其中使用错误且令人困惑。

2 个答案:

答案 0 :(得分:1)

小部件方法winfo_toplevel将返回ToplevelTk的实例。

top = some_widget.winfo_toplevel()

答案 1 :(得分:0)

我不确定,但我认为通过toplevel你意味着小部件的父级:如果你创建了嵌套小部件,如

root = tk.Tk()
frame = tk.Frame(root)
label = tk.Label(frame, text="text")

然后framelabel的父级,rootframe的父级。

要访问窗口小部件的父窗口,可以使用winfo_parent方法获取父名称,然后使用nametowidget方法获取与名称对应的实际窗口小部件:

any_widget.nametowidget(any_widget.winfo_parent())