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

How may I find out the Toplevel container of a widget?

我像往常一样创建深度嵌套的小部件框架,有时可以创建其他 Toplevel。 帧数。

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

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

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

编辑:删除(供将来参考)单词 frame 的使用错误和混淆。

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

top = some_widget.winfo_toplevel()

我不确定,但我认为顶层是指小部件的父级:如果您创建了嵌套小部件,例如

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

那么 framelabel 的父级,rootframe 的父级。

要访问一个widget的parent,可以使用winfo_parent方法获取parent名称,然后,nametowidget方法获取名称对应的实际widget:

any_widget.nametowidget(any_widget.winfo_parent())