Tkinter создает несколько кнопок в цикле и меняет текст по нажатым - PullRequest
0 голосов
/ 23 октября 2019

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

Моя идея состояла в том, чтобы собрать кнопки в списке, чтобы я мог получить доступ к каждой отдельной кнопке. Есть ли лучший способ?

В данный момент я пытаюсь использовать команду-кнопки, чтобы изменить текст нажатой кнопки. В «действии» -функции я получаю код ошибки «список индексов вне диапазона», когда я пытаюсь запустить код! найти решение без успеха. Любая идея была бы очень признательна.

Я использовал совершенно такой же код, не создавая список. Код работал, но когда я нажал кнопку, только последняя созданная кнопка изменила текст. Может ли быть так, что каким-то образом мне нужно использовать функцию «StringVar» или «textvariable»?

import tkinter as tk


window = tk.Tk()
window.geometry("300x150")
window.title("Tic Tac Toe")


def action(i):
    btns[i].configure(text = 'X')


btn_nr = -1
btns = []
for x in range(1,4):
    for y in range(1,4):
        btn_nr += 1
        print(btn_nr)
        btns.append(tk.Button(text='-', command = action(int(btn_nr))))
        btns[int(btn_nr)].grid(row=x, column=y)

exit_button = tk.Button(text='Exit Game', command=window.destroy)
exit_button.grid(row=4, column=1, columnspan=15)


window.mainloop()

1 Ответ

0 голосов
/ 24 октября 2019

Вы были почти там. См. Ниже вопрос, который решается, так как вам нужна лямбда для передачи btn_nr в функцию action. Между прочим, нет необходимости в int ()

import tkinter as tk

window = tk.Tk()
window.geometry("300x150")
window.title("Tic Tac Toe")


def action(button):

    if btns[button].cget('text') == '-':
        btns[button].configure(text='X')

    else:
        btns[button].configure(text='-')


btn_nr = -1
btns = []

for x in range(1, 4):

    for y in range(1, 4):

        btn_nr += 1
        print(btn_nr)

        btns.append(tk.Button(text='-', command=lambda x=btn_nr: action(x)))
        btns[btn_nr].grid(row=x, column=y)

exit_button = tk.Button(text='Exit Game', command=window.destroy)
exit_button.grid(row=4, column=1, columnspan=15)

window.mainloop()

Я немного изменил функцию action, чтобы она переключалась между 'X' и '-'.

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