Есть ли способ создать кнопки в для l oop с той же функцией, но с разными атрибутами? - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь создать несколько кнопок, чтобы каждая из них активировала одну и ту же функцию, но с изменением атрибутов. Вероятно, случается так, что значение, которое я беру из для l oop, является последним, которое он генерирует. Вот код:

from tkinter import Tk, Button

root = Tk()
root.geometry('500x500')

def add(num):
    print(num)
    return num + 5

num_list = [1, 2, 3, 4, 5]
for i in range(len(num_list)):
    Button(root, text=str(num_list[i]), command=lambda: print(add(num_list[i]))).place(x=350 ,y=250+i*20)

root.mainloop()

В следующем коде, независимо от того, какую кнопку вы нажимаете, она всегда будет отправлять 5 как значение I (последнее значение).

1 Ответ

2 голосов
/ 18 марта 2020

Вы можете просто добавить переменную к лямбда-вызову, например, так:

Button(root, text=str(num_list[i]), command=lambda i=i: print(add(num_list[i]))).place(x=350 ,y=250+i*20)

То, что i = i заставит программу работать так, как вы хотите, так как она заставит функцию принимать значение я когда кнопка была создана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...