在Python Tkinter中获取父窗口小部件的父级

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python Tkinter中获取父窗口小部件的父级相关的知识,希望对你有一定的参考价值。

我正在尝试获取窗口小部件的父级,然后获取该窗口小部件的父级。但每次我试图得到一个错误。

错误:

AttributeError: 'str' object has no attribute '_nametowidget'

为什么它会给我这个错误。有人可以向我解释为什么我收到此错误并帮我修复它?

码:

parent = event.widget.winfo_parent()
parentName = event.widget._nametowidget(parent)

frameParent = parentName.winfo_parent()
frameParentName = frameParent._nametowidget(frameParent)
答案

http://effbot.org/tkinterbook/widget.htm

提到如下,winfo_parent()是获取父名称的方法。

您获得的错误意味着event.widget没有名为_nametowidget的方法。所以你无法将其称为函数。

您可以尝试以下代码获取父母。

parent = event.widget.winfo_parent()
from Tkinter import Widget
Widget._nametowidget(parent)
另一答案

你对_nametowidget()的第二次调用与你的第一次不同。你的第四行是坏的,因为你的调用是基于字符串(frameParent)而不是在widget(parentName)上的_nametowidget()。这部分是因为您的“widget”和“widgetName”的命名约定被颠倒了......

frameParentName = frameParent._nametowidget(frameParent)

                   ^^^^^^^^^^^ -- this is the name string. you need a widget

我会稍微重写您的代码,如下所示:

parentName = event.widget.winfo_parent()
parent     = event.widget._nametowidget(parentName) #event.widget is your widget

frameParentName = parent.winfo_parent()
frameParent     = parent._nametowidget(frameParentName) #parent is your widget
另一答案
grandparent = event.widget.master.master

answer here

以上是关于在Python Tkinter中获取父窗口小部件的父级的主要内容,如果未能解决你的问题,请参考以下文章

展开文本小部件以填充 Tkinter 中的整个父框架

如何从Tkinter,Python中的Text小部件中移除焦点

如何将Tkinter Text小部件的撤消/重做历史记录复制到另一个小部件中

如何在 tkinter 中找出当前小部件的大小?

使用tkinter.pack()始终使小部件居中

Tkinter:如何将文本小部件中输入的文本保存到新窗口中?