Python 如何使用tkinter';类中的nametowidget函数

Python 如何使用tkinter';类中的nametowidget函数,python,tkinter,Python,Tkinter,我正在类中编写一个tkinter迷你项目,目前正在尝试获取按钮小部件的名称,但每次我尝试运行该程序时,都会收到一个回溯错误。我很好奇如何着手修复nametowidget行以获得小部件的正确名称 from tkinter import * import tkinter.messagebox root = Tk() class WindowPane(Frame): def __init__(self,master): Frame.__init__(self,master)

我正在类中编写一个tkinter迷你项目,目前正在尝试获取按钮小部件的名称,但每次我尝试运行该程序时,都会收到一个回溯错误。我很好奇如何着手修复nametowidget行以获得小部件的正确名称

from tkinter import *
import tkinter.messagebox
root = Tk()
class WindowPane(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.master = master
        self.WindowWidget()

    def WindowWidget(self):
        self.stringer = StringVar()
        self.button1 = Button(text = "Click me")
        self.button1.place(x=200,y=50)
        print(self.master.nametowidget(".button1"))
root.geometry("200x200")
playback = WindowPane(root)
root.mainloop()
nametWidget
中的“name”不是用于保留对小部件引用的变量的名称(即:在本例中,它不是“button1”)。这是有意义的,因为您可以有多个变量都指向同一个对象——python如何知道您想要哪个名称

该名称是指嵌入式tcl/tk解释器使用的内部小部件名称。通常,这是基于父级名称、小部件类和可选数字计算的。例如,默认情况下创建的第一个帧的名称为
。!帧
,下一帧的名称为
。!第2帧,依此类推。第一帧中的第一个按钮将命名为
。!框架1。!按钮1等

您可以通过打印任何小部件的字符串表示来查看其名称。例如,在您的代码中,您可以执行
打印(str(self.button1)
,这将显示名称实际上是
!button

不能使用tkinter中内置的任何东西将字符串(如
“button1”
)转换为实际的小部件。但是,变量(如
self.button1
)是当前对象的属性,因此可以使用python内置的
getattr
函数获取具有给定名称的属性值

在您的例子中,您可以使用
getattr(self,“button1”)
获取对实际小部件对象的引用