首页 文章

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

提问于
浏览
0

我有一个noob问题:

我正在尝试创建一个类“Field”,它继承了Tkinter的Button类中的所有内容,但还包含附加属性“location”和获取该属性的方法 . 实现之后,我在新的“Field”类的实例中尝试让Field的命令调用它的函数来获取它的location属性:

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()

出现带按钮的根窗口但按下后会出现以下错误:

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”,它应该返回它的位置?

先感谢您

1 回答

  • 3

    Edit: 对不起我完全没有关于做 lambda self: self.getLoc 的原始回复,更正了答案(并且这次通过运行代码来检查!)

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

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

    您可以在effbot.org上阅读有关Tkinter对象的配置方法(以及更多)的更多信息 .

相关问题