10

我在学习 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。关于我如何分辨的任何建议?

4

2 回答 2

23

您可以使用 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})
于 2009-10-09T11:51:46.637 回答
2

似乎命令方法没有传递任何事件对象。

我可以想到两种解决方法:

  • 将唯一的回调关联到每个按钮

  • 调用button.bind('<Button-1>', self.populateMethod)而不是将 self.populateMethod 作为command. 然后 self.populateMethod 必须接受第二个参数,该参数将是一个事件对象。

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

于 2009-10-08T19:15:08.347 回答