Проблема создания нескольких кнопок Python Tk - PullRequest
1 голос
/ 12 августа 2011

Я создаю десять кнопок, и тексты кнопок помечены от 1 до 10. Следующий код создает 10 кнопок и метки правильно.Но он печатает 9 как вывод для всех кнопок.Я ожидаю, что он напечатает соответствующее число кнопки на экране, например, если пользователь нажимает кнопку 2, он должен напечатать 2.

def create():
for i in range (1,10):
    lst.insert(i,Button(text=i,command=lambda: prnt(i)).pack())

(Примечание: 'prnt (i)'- это функция, которая просто печатает значение, которое у меня есть.' lst '- это список, в котором хранятся созданные кнопки.)

По выводу я могу сказать, что программа использует последнее значение i в качестве аргументафункция, когда пользователь нажимает кнопку, так как бы я решил это без необходимости писать 10 строк кода для каждой кнопки.

1 Ответ

2 голосов
/ 12 августа 2011

Попробуйте это (обратите внимание на именованный аргумент лямбды):

def create():
    for i in range (1,10):
        lst.insert(i,Button(text=i,command=lambda i=i : prnt(i)).pack())

Это передает значение от i в лямбду в качестве локальной переменной. Без этого вы используете ссылку на исходную переменную, которая, конечно, всегда будет разрешать все, что хранится в исходной переменной.

...