Как обратиться к определенному элементу из цикла "for"?
Я изучаю Python и использую tkinter для создания калькулятора с единым полем ввода. Я не могу понять как можно обратиться к определенному элементу в цикле "for".
for var2 in range(6):
plus_button=tk.Button(win,text="",borderwidth=1,relief="solid",bg="#dadada",font=('tahoma',17))
plus_button.place(x=2,y=y_margin-4,height=50,width=77,anchor="sw")
y_margin-=53
Ответы (1 шт):
Автор решения: GrAnd
→ Ссылка
Если и текст, и функции уже известны, то можно прямо в этом же цикле:
def func1():
pass
# ....
for text, func in (("text1", func1),
("text2", func2),
....
("text6", func6)):
plus_button = tk.Button(win, text=text, command=func, borderwidth=1, relief="solid", bg="#dadada", font=('tahoma',17))
plus_button.place(x=2, y=y_margin-4, height=50, width=77, anchor="sw")
y_margin -= 53
Если к этим кнопкам в последующем потребуется обращение, то можно сохранить ссылки на них в список:
plus_buttons = []
for text, func in (("text1", func1),
("text2", func2),
....
("text6", func6)):
plus_buttons.append(tk.Button(win, text=text, command=func, borderwidth=1, relief="solid", bg="#dadada", font=('tahoma',17)))
plus_buttons[-1].place(x=2, y=y_margin-4, height=50, width=77, anchor="sw")
y_margin -= 53
Можно и с универсальным обработчиком, передав ему в параметре что-то, что позволит отличить нажатую кнопку:
def btn_func(btn, text):
if text == "text1":
pass
# ....
for text in ("text1", "text2", ..., "text6"):
plus_button = tk.Button(win, text=text, command=lambda: btn_func(text), borderwidth=1, relief="solid", bg="#dadada", font=('tahoma',17))
....
Вообще, вариантов и комбинаций уйма, в зависимости от конкретной преследуемой цели.