Как понять закрытие в лямбда?

Я хочу сделать 5 кнопок в цикле, и для каждой кнопки связывается благодарность за печать индекса. В следующем решении он всегда печатает тот же самый индекс.

Мой код:

for i in range(5): make_button = Tkinter.Button(frame, text ="make!", command= lambda: makeId(i)) def makeId(i): print(i) 

Он всегда печатает 5. Как я могу это исправить?

One Solution collect form web for “Как понять закрытие в лямбда?”

Разрешение переменных в lambdas выполняется при выполнении лямбда. В это время для всех кнопок i = 5. Чтобы исправить эту проблему, сделайте следующее:

  make_button = Tkinter.Button(frame, text ="make!", command= lambda i=i: makeId(i)) 

Это создает i как локальную переменную в лямбда. Эта локальная переменная будет содержать правильное значение i из цикла. локальная переменная может иметь любое имя, не обязательно i , например command= lambda a=i: makeId(a)) .

  • Как связать собственные события в текстовом виджете Tkinter после того, как он будет привязан текстовым виджетами?
  • Окно Tkinter автоматически закрывается после запуска программы Python в PyCharm
  • Tkinter определяет раскладку клавиатуры
  • Как связать приложение Python, включая зависимости?
  • Разница между параметрами «fill» и «expand» для метода tkinter pack
  • Почему люди говорят: «Не используйте .place ()»?
  • Невозможно добавить в буфер обмена
  • Могу ли я настроить графические интерфейсы Tkinter так, как вы создаете HTML с помощью CSS?
  • Задержка времени Tkinter
  • Как сохранить выделение в списке tkinter?
  • методы программирования tkinter и GUI
  • Python - лучший язык программирования в мире.