Tkinter assign button command in a for loop with lambda [duplicate]
Tkinter назначает команду кнопки в цикле for с помощью lambda
Я пытаюсь создать несколько Buttons (с for циклом) следующим образом:
defa(self, name): print(name)
users = {"Test": "127.0.0.0", "Test2": "128.0.0.0"} row = 1 for name in users: user_button = Tkinter.Button(self.root, text=name, command=lambda: self.a(name)) user_button.grid(row=row, column=0) row += 1
и для каждой кнопки получает свой собственный параметр (получение теста "Test" и получение Test2 "Test2"), но когда я нажимаю кнопки, они обе печатают, "Test2" что означает, что они используют одну и ту же функцию с одним и тем же параметром.
Как я могу это решить?
Переведено автоматически
Ответ 1
Проблема заключается в вашем lambda выражении в for цикле. Он использует name переменную, но name переменная переназначается на каждой итерации for цикла, так что в итоге все кнопки получают последнее значение, которому name было присвоено в цикле for. Чтобы избежать этого, вы можете использовать параметры ключевого слова по умолчанию в вашем lambda выражении следующим образом: