在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
以上是关于在Python Tkinter中获取父窗口小部件的父级的主要内容,如果未能解决你的问题,请参考以下文章
如何从Tkinter,Python中的Text小部件中移除焦点