我在学习Python时正在制作一个简单的小工具。它动态生成按钮列表:
for method in methods:
button = Button(self.methodFrame, text=method, command=self.populateMethod)
button.pack({'fill': 'x', 'expand': 1, 'padx': 5, 'pady': 3})
那部分工作正常。但是,我需要知道在self.populateMethod
内按下了哪些按钮。关于我怎么能说出来的任何建议?
答案 0 :(得分:17)
您可以使用lambda将参数传递给命令:
def populateMethod(self, method):
print "method:", method
for method in ["one","two","three"]:
button = Button(self.methodFrame, text=method,
command=lambda m=method: self.populateMethod(m))
button.pack({'fill': 'x', 'expand': 1, 'padx': 5, 'pady': 3})
答案 1 :(得分:2)
似乎命令方法没有传递任何事件对象。
我可以想到两个解决方法:
将唯一回调关联到每个按钮
调用button.bind('<Button-1>', self.populateMethod)
而不是将self.populateMethod作为command
传递。然后self.populateMethod必须接受第二个参数,该参数将是一个事件对象。
假设第二个参数被称为event
,event.widget
是对点击按钮的引用。