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

问题描述 投票:2回答:3

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

错误:

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)
python tkinter widget parent
3个回答
3
投票

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

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

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

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

parent = event.widget.winfo_parent()
from Tkinter import Widget
Widget._nametowidget(parent)

0
投票

你对_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

0
投票
grandparent = event.widget.master.master

answer here

© www.soinside.com 2019 - 2024. All rights reserved.