Как я могу заставить свой цикл For сохранить индекс кнопок в другой переменной? - PullRequest
0 голосов
/ 15 февраля 2019

Я определил 2 переменные.Первый работает отлично, показывая мне все кнопки с именами людей в моих игроках Global Array.

Я добавил командную строку в свою кнопку, которая должна активировать мою вторую переменную def после ее нажатия.вторая переменная должна сохранить индекс кнопки или текст (пробовал оба), а затем я использовал print, чтобы отобразить то, что нужно сохранить, прежде чем я смогу двигаться дальше.

Теперь здесь кроется проблема.

Когда я нажимаю на него, он показывает мне просто пустой массив.Я попытался использовать несколько других вещей, таких как [i] вместо текста, btn, который был назначен для кнопок, и я попытался глобально btn в одной точке, потому что я не мог использовать не глобальную переменную внутри моей второй функции, но это также нене помогаю. Я читаю о частичках и лямбде, но не могу понять, что мне нужно добавить / изменить, чтобы начать.

Вот мой код:

players=['x','y','z']

players_to_random=[]

def showButtons():
    for i in players:
        btn = Button(window, text=i, command=onclick)
        btn.pack(side=LEFT)

def onclick():
    players_to_random.append() # tried several things with () and without
    print(players_to_random)

showButtons()

1 Ответ

0 голосов
/ 15 февраля 2019

Ваша функция onclick не может узнать, какая кнопка была нажата.Вы должны добавить параметр в функцию и передать его в command, используя либо lambda (см. здесь ), либо partial

def showButtons():
    for i in players:
        btn = Button(window, text=i, command=lambda i=i: onclick(i))
        # -- OR THIS (not both) --
        btn = Button(window, text=i, command=functools.partial(onclick, i))
        btn.pack(side=LEFT)

def onclick(player):
    players_to_random.append(player)
    print(players_to_random)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...