仅为回调函数传递了最后一个变量

时间:2012-03-30 02:30:55

标签: python tkinter

我正在尝试为Tkinter中的按钮数组生成带有变量参数的回调函数,但问题是只为所有回调函数传递了最后一项。例如,我有类似的东西:

a = [0, 1, 2]
btn = []
for i in range(0,3):
    btn.append(Button(frame, text='something', command=lambda: funct(a[i])))

对于btn列表中的每个按钮,a列表中的最后一项2将传递给函数funct()。但是,我想要的是a[0]传递给第一个按钮funct(),第二个按钮传递a[1],依此类推。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

You're doing closures wrong.

for i in range(0,3):
    btn.append(Button(frame, text='something',
      command=lambda a=a, i=i: funct(a[i])))