Как получить доступ к кнопке в сетке кнопок, используя 2D-список в tkinter? - PullRequest
0 голосов
/ 11 января 2020

Я новичок в tkinter, и я пытался создать сетку кнопок 5X5, используя 2D-список. Но если я попытаюсь изменить цвет кнопки bg после для l oop, он только изменит цвет кнопок последней строки.

from tkinter import *
rows=5
columns=5
btns=[[None]*5]*5
root=Tk()
def darken(btn):
    btn.configure(bg='black')
for i in range(rows):
    for j in range(columns):
        btns[i][j]=Button(root,padx=10,bg='white')
        btns[i][j]['command']=lambda btn=btns[i][j]:darken(btn)
        btns[i][j].grid(row=i,column=j)
btns[0][0]['bg']='yellow'
root.mainloop()

1 Ответ

0 голосов
/ 11 января 2020

Проблема в том, как вы строите список

btns=[[None]*5]*5

, таким образом, вы создаете список и повторяете его ссылку 5 раз. Поскольку это происходит каждый раз при добавлении кнопки в список строк, такие же изменения влияют на другие списки строк.

EX

btns = [[None]*5]*5
btns[0][0] = 'a'

btns ---> [
['a', None, None, None, None],
['a', None, None, None, None],
['a', None, None, None, None],
['a', None, None, None, None],
['a', None, None, None, None]
]

Это правильное способ построения списка

btns = [[None for i in range(rows)] for j in range(columns)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...