调用重置函数时仅清除最后一行条目

Only last row of Entries is cleared when reset function is called

我正在练习 python 的基本概念,并尝试在 Tkinter 的帮助下编写 'SUDOKU' 游戏。但是当我尝试使用重置功能清除所有条目字段时程序发生冲突,因为除了整个二维列表外,只执行最后一行的条目。

def reset():
    for i in range(0,rows,1):
        for j in range(0,cols,1):
            col[i][j].delete(0, "end")

from Tkinter import Tk, Canvas, Entry, Button, CENTER, IntVar

root = Tk()

screen = Canvas(root, height = 430, width = 460)
screen.pack()

screen.create_text(200, 15, text = 'SUDOKU', font = 'calibri 20 bold')

screen.create_line(127, 54, 127, 408)
screen.create_line(232, 54, 232, 408)

screen.create_line(24, 170, 336, 170)
screen.create_line(24, 290, 336, 290)

check_button = Button(root, text = 'Check', font = 'Calibri 10 bold', bd = 0, bg = 'Green', fg = 'white', padx = 10, pady = 5)
screen.create_window(400, 70, window = check_button)

reset_button = Button(root, text = 'Reset', font = 'Calibri 10 bold', bd = 0, bg = 'Red', fg = 'white', padx = 10, pady = 5, command = reset)
screen.create_window(400, 110, window = reset_button)

x, y, n = 0, 0, 0

cols, rows, values = 9, 9, 81

col = [[None]*cols]*rows
val = [[IntVar]*cols]*rows

for i in range(0,rows,1):
    x = 0
    if i == 0:
        y += 70 
    else:
        y += 40
    for j in range(0,cols,1):
        x += 40
        col[i][j] = Entry(root, width = 2, font = 'Calibri 20', bd = 0, justify = CENTER)
        screen.create_window(x, y, window = col[i][j])
        x -= 5

root.mainloop()

构造 col 和 val 的方式创建了 9 行,指向相同的 9 列。仅创建一行然后指向 9 次

cols, rows, values = 9, 9, 81
col = [[None]*cols]*rows
col
# [[None, None, None, None, None, None, None, None, None],
#  [None, None, None, None, None, None, None, None, None],
#  [None, None, None, None, None, None, None, None, None],
#  [None, None, None, None, None, None, None, None, None],
#  [None, None, None, None, None, None, None, None, None],
#  [None, None, None, None, None, None, None, None, None],
#  [None, None, None, None, None, None, None, None, None],
#  [None, None, None, None, None, None, None, None, None],
#  [None, None, None, None, None, None, None, None, None]]

col[0][1]=100
col
# [[None, 100, None, None, None, None, None, None, None],
#  [None, 100, None, None, None, None, None, None, None],
#  [None, 100, None, None, None, None, None, None, None],
#  [None, 100, None, None, None, None, None, None, None],
#  [None, 100, None, None, None, None, None, None, None],
#  [None, 100, None, None, None, None, None, None, None],
#  [None, 100, None, None, None, None, None, None, None],
#  [None, 100, None, None, None, None, None, None, None],
#  [None, 100, None, None, None, None, None, None, None]]

像这样的东西应该有用。

col = []  # Empty lists
val =[]

for i in range(0,rows,1):
    x = 0
    if i == 0:
        y += 70 
    else:
        y += 40
    rowc = []  # Empty row lists
    rowv = []
    for j in range(0,cols,1):
        x += 40
        v = IntVar()
        ent = Entry(root, width = 2, textvariable=v, font = 'Calibri 20', bd = 0, justify = CENTER)
        screen.create_window(x, y, window = ent)
        rowc.append(ent)   # Append to the rows
        rowv.append(v)
        x -= 5
    col.append(rowc)  # Append rows to the column lists
    val.append(rowv)