Python tkinter - 无法在循环上重复创建画布上的文本

时间:2017-03-27 18:11:49

标签: python python-3.x canvas tkinter tkinter-canvas

下面的方法旨在展示数独在画布上回溯解决方案的演变。

findAnswer()函数将返回一个9x9列表,其中包含数独的原始布局到 self.original 以及一个9x9列表到 self的列表。 btSolution ,它包含回溯解决方案的所有迭代。

问题在于,它不是在画布上显示所有迭代,而是遍历所有内容,只显示最后一个。我调试并检查 self.board.create_text()确实每次都使用正确的参数调用,但只显示最后一次调用时画布上的数字。

def create_gif(self):
    self.original, self.btSolution = findAnswer(self.sudoku, gif=1)

    for sudoku in self.btSolution:
        time.sleep(0.1)
        self.board.delete("gifNumbers")

        for row in range(9):
            for col in range(9):

                if sudoku[row][col] != 0:
                    x = row * CELL + 0.5 * CELL
                    y = col * CELL + 0.5 * CELL

                    color = "red" if sudoku[row][col] == self.original[row][col] else "black" 

                    self.board.create_text(x, y, text=sudoku[row][col], fill=color, tags="gifNumbers")

1 个答案:

答案 0 :(得分:0)

这听起来像是在你的" findAnswer"方法你使用了这样的代码:

new_answer = original # make a copy

并没有意识到该代码不能复制;它是一个新的参考。要复制2D列表,您需要使用deepcopy功能:

from copy import deepcopy
...
new_answer = deepcopy(original) # make a copy