Python Tkinter 将自身作为按钮命令参数传递

Python Tkinter passing self as button command parameter

我有一个菜鸟问题:

我正在尝试制作一个 class "Field",它继承了 Tkinter 按钮 class 的所有内容,但还包含附加属性 "location" 和获取该属性的方法.实现后,我创建了新的 "Field" class 实例,并尝试让 Field 的命令调用其函数以获取其位置属性:

from Tkinter import *

class Field(Button):
    def __init__(self, location, **k):
        Button.__init__(self, **k)
        self.location = location

    def getLoc(self):
        return self.location

root=Tk()
c = Field(2, text="Text", command = lambda: self.getLoc)
c.pack()
root.mainloop()

带按钮的根window出现,但按下它时,出现以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1470, in __call__
    return self.func(*args)
  File "C:\Users\PC\Desktop\test2.py", line 12, in <lambda>
    c = Field(2, text="Text", command = lambda: self.getLoc)
NameError: global name 'self' is not defined

我应该怎么做才能让它看到我希望最近实例化的 "Field" 成为它应该返回其位置的 "self" 这一事实?

提前致谢

编辑: 抱歉,我完全不了解关于 lambda self: self.getLoc 的原始回复,已更正答案(这次通过 运行 代码检查! )

您可能应该在创建按钮后配置命令,这样您就可以明确引用按钮。

root=Tk()
c = Field(2, text="Text")
c.config(command=c.getLoc)
c.pack()
root.mainloop()    

您可以在 effbot.org.

上阅读更多关于 Tkinter 对象(以及更多)的配置方法