确定在Tkinter中按下了哪个按钮?

时间:2009-10-08 18:59:24

标签: python button tkinter

我在学习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内按下了哪些按钮。关于我怎么能说出来的任何建议?

2 个答案:

答案 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必须接受第二个参数,该参数将是一个事件对象。

    假设第二个参数被称为eventevent.widget是对点击按钮的引用。