[英]Python passing an instance of a Tkinter button into its own command
[英]Python Tkinter passing self as button command parameter
我有一个菜鸟问题:
我正在尝试创建一个“字段”类,该类继承Tkinter的Button类的所有内容,但还包含其他属性“位置”和获取该属性的方法。 实现了这一点之后,我以新的“ 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
我应该怎么做才能使我希望最近实例化的“字段”成为应返回其位置的“自身”这一事实?
先感谢您
编辑:对不起,我完全lambda self: self.getLoc
做lambda self: self.getLoc
的原始响应lambda self: self.getLoc
,更正了答案(并且这次通过运行代码进行检查!)
创建按钮后,您可能应该配置命令,这样就可以显式引用该按钮。
root=Tk()
c = Field(2, text="Text")
c.config(command=c.getLoc)
c.pack()
root.mainloop()
您可以在effbot.org上了解有关Tkinter对象的config方法的更多信息(以及更多信息)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.