I want to make 5 buttons in a loop, and for each buttons bind a commend to print the index. In the following solution it always prints the same index.
My code like this:
for i in range(5):
make_button = Tkinter.Button(frame, text ="make!",
command= lambda: makeId(i))
def makeId(i):
print(i)
It always prints 5. How can I fix this?
Resolution of variables in lambdas is done when lambda is executed. At this time, for all buttons i=5. To rectify this issue do as follows:
make_button = Tkinter.Button(frame, text ="make!",
command= lambda i=i: makeId(i))
This creates i as a local variable in a lambda. This local variable will hold correct value of i from the loop. the local variable can have any name, not necessarily i
, e.g. command= lambda a=i: makeId(a))
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With