将事件绑定到窗口小部件不起作用

时间:2014-03-24 12:38:28

标签: python tkinter

我有一个函数,比如foo,它应该绑定一个事件

    def foo:
         for x in widget_list:
              widget.config(command = lambda: self.function(widget_list.index(x))

    def function(index):
         do something here....
         print index

小部件列表包含按钮,每当我点击相应的按钮时,他们应该打印到IDLE他们的索引,但会发生的是我点击的所有按钮最终都打印了widget_list的最后一个索引。我猜测,对于迭代,函数的参数也会改变,因此只保留最后一个索引。无论如何将先前的索引绑定到按钮?

1 个答案:

答案 0 :(得分:0)

最简单的解决方法是确保您的lambda使用当前值x

widget.config(command = lambda x=x: self.function(widget_list.index(x))

这会强制x成为函数的默认参数,默认值将是定义lambda时x的值。