Команда Tkinter назначить кнопку в цикле с лямбдой

Я пытаюсь создать несколько кнопок (с a для), например:

def a(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 get Test и Test2, получающий Test2), но когда я нажимаю кнопки, они оба печатают «Test2», что означает, что они используют одну и ту же функцию с тем же параметром.

  • Как я могу изменить текст кнопки, от текста до пустого имени с задержкой?
  • Как реализовать простую кнопку в PyQt
  • Как передать аргументы команде Button в Tkinter?
  • Объект 'NoneType' не имеет атрибута 'config'
  • Как я могу это решить?

  • Pandas dataframe добавляет поле, основанное на нескольких операторах if
  • AWS Python Lambda с Oracle
  • Python, cPickle, травильные лямбда-функции
  • Лямбда-итерация Python не работает должным образом
  • Pandon pandas - фильтровать строки после groupby
  • Как понять закрытие в лямбда?
  • One Solution collect form web for “Команда Tkinter назначить кнопку в цикле с лямбдой”

    Проблема в том, что ваша ламба в цикле for. В вашей лямбда используется переменная name , но переменная name каждый раз переназначается через цикл for. Таким образом, в конце все кнопки получают последнее значение, которому было присвоено name в цикле for. Чтобы этого избежать, вы можете использовать параметры ключевого слова по умолчанию в своем выражении lamba следующим образом:

     user_button = Tkinter.Button(self.root, text=name, command=lambda name=name: self.a(name)) 

    Это привязывает текущее значение переменной name к аргументу ключевого слова name lamba каждый раз через цикл, создавая желаемый эффект.

    Python - лучший язык программирования в мире.