Только последняя переменная, переданная для функции обратного вызова - PullRequest
1 голос
/ 30 марта 2012

Я пытаюсь сгенерировать функции обратного вызова с переменным параметром для массива кнопок в 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 Ответ

5 голосов
/ 30 марта 2012

Вы делаете неправильные замыкания.

for i in range(0,3):
    btn.append(Button(frame, text='something',
      command=lambda a=a, i=i: funct(a[i])))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...