Как передать в функцию аргументы в виде итерации цикла, tkinter

from tkinter import *


def is_zero(x):
    print(x)
    if x == 0:
        print(0)


root = Tk()
root.geometry('1000x100+500+0')

for i in range(10):
    but = Button(text=i, command=lambda: is_zero(i), font='a 25')
    but.place(width=100, x=i*100, height=100)

root.mainloop()

Программа выводит всегда число 9. Как сделать так чтобы аргументы кнопки передавались в функцию адекватно и не были одинаковыми?


Ответы (1 шт):

Автор решения: eri

Проблема в том что i глобальная. Её можно локализовать например так

from tkinter import *
def is_zero(x):
    print(x)
    if x == 0:
        print(0)

root = Tk()
root.geometry('1000x100+500+0')

def make_btn(i):
    but = Button(text=i, command=lambda: is_zero(i), font='a 25')
    but.place(width=100, x=i*100, height=100)

for i in range(10):
    make_btn(i)

root.mainloop()
→ Ссылка