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

Я хочу сделать 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 в Spyder
  • Удаление и изменение привязки события tkinter в python
  • python перетащить файлы explorer в виджет ввода tkinter
  • Как изменить текст метки Tkinter при нажатии кнопки
  • Как остановить tkinter после функции?
  • Создание единого EXE с использованием py2exe для программы Tkinter
  • Привязка <Key> к записи в Tkinter
  • Где найти полную ссылку Tkinter?
  • Python - лучший язык программирования в мире.