Почему текстовый параметр реагирует на цикл, в то время как параметр команды не используется при использовании функции Button в Python - PullRequest
0 голосов
/ 21 декабря 2018

Я пишу программу, которая вычисляет мои оценки, но я застрял на небольшой проблеме, которую не могу исправить.Я использую цикл for, чтобы добавить в список несколько кнопок, каждая из которых следует одному и тому же методу при нажатии, но имеет разные параметры.Передаваемый параметр - это x, который является параметром экземпляров цикла for.Почему x используется правильно при выборе текста кнопки, но неправильно при выборе параметра для функции?

Когда я запускаю код ниже, кнопки распечатываются в правильном порядке с правымтекст, таким образом, x зацикливается и дает различные параметры 'text' (course [x] .shortname) для каждой кнопки.Однако, когда я распечатывал параметр метода 'gradesCourseSelectionButtonsMethod' во время его запуска, использовался тот же параметр (номер 4), вместо 0 для первой кнопки, 1 для второй и т. Д. 4 - этодлина списка.Так что он всегда работает так, как будто я нажимаю последнюю кнопку.

for x in range(0,len(course)):
    gradesCourseSelectionButttons.append(Button(
    cls. gradesCourseSelectionWindow,text= course[x].shortName, 
    relief='solid', 
    command=lambda:Course.gradesCourseSelectionButtonsMethod(x)))

Я хочу, чтобы x был зацикливался как в текстовом параметре, так и в параметре команды, а не просто проходил через текстовый параметр.

1 Ответ

0 голосов
/ 21 декабря 2018

Попробуйте присвоить аргумент x локальной переменной в лямбда-функции следующим образом:

lambda y=x: Course.gradesCourseSelectionButtonsMethod(y)

Надеюсь, это поможет!

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