Список записей для Tkinter - PullRequest
0 голосов
/ 16 января 2020

Я только начинаю работать с Tkinter и хочу создать простой ввод GUI для Sudokusolver. Проблема в том, что я не могу создать список списков с 9 * 9 входами для судоку. Каждый раз, когда я хочу получить доступ к данным в сетке, например. grid [0] [0] выводит сетку [8] [0], поэтому всегда последняя строка ... Мой код пока:

from tkinter import *

grid = []
row = []
board = []

for i in range(9):
    row.append(0)
for n in range(9):
    grid.append(row)
    board.append(row)


def entry_copy():
    print(grid[1][1].get())
    for k in range(9):
        for l in range(9):
            pass


tkFenster = Tk()
tkFenster.title('Sudoku')
for i in range(9):
    for n in range(9):
        grid[i][n] = Entry(master=tkFenster, bg='white', width='5')
        grid[i][n].grid(row=i, column=n, padx='5', pady='8', sticky='ew')
        grid[i][n].insert(END, i + n)
button_copy = Button(master=tkFenster, text='Fertig!', width='5', bg='#FBD975', command=entry_copy)
button_copy.grid(row=9, column=4, padx='5', pady='5')

tkFenster.mainloop()

Заранее благодарю за помощь:)

1 Ответ

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

Проблема в том, что когда вы создаете сетку / доску, каждая строка не является копией предыдущей строки, это тот же список, что и предыдущая строка. Python не создает новый список, он просто ссылается на исходный список.

Впоследствии, если вы измените столбец 2 в одной строке, другие строки также будут содержать это же значение в столбце 2.

Попробуйте использовать что-то вроде кода ниже для создания ваших 2-D списков

board = [[0]*9 for i in range(9)]

Теперь, когда вы изменяете значение в одной строке, это не влияет на другие.

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