Эта проблема была много раз - поэтому вы могли ее найти.
command=lambda args=i:printmyvalue(args)
В вашей версии lambda:printmyvalue(i)
не копирует значение из i
в функцию lambda
, но сохраняет ссылку на память, используемая переменной i
. Таким образом, все кнопки имеют одинаковые ссылки на одну и ту же память. Когда вы нажимаете кнопку, она получает значение из этой памяти, но в этой памяти находится последнее значение, используемое в l oop, поэтому все кнопки используют последнее значение.
Используя lambda args=i:
, он создает новую переменную args
в каждом lamba
и копирует значение из i
в args - so every
lambda` использует другую переменную с другим значением.