Python Tkinter仅在for循环的第一次迭代中绘制

Python Tkinter仅在for循环的第一次迭代中绘制,python,for-loop,tkinter,drawing,Python,For Loop,Tkinter,Drawing,我正在尝试为我用Python制作的Otherlo游戏制作GUI。下面的for循环仅显示第一行中的片段。一旦它第二次迭代嵌套for循环,接下来的任何一行都不会显示更多的片段。是什么阻止了这些其他部件的绘制 def _draw_pieces(self) -> None: self._canvas.delete(tkinter.ALL) rows = int(self._width/RADIUS) columns = int(self._height/RADIUS)

我正在尝试为我用Python制作的Otherlo游戏制作GUI。下面的for循环仅显示第一行中的片段。一旦它第二次迭代嵌套for循环,接下来的任何一行都不会显示更多的片段。是什么阻止了这些其他部件的绘制

def _draw_pieces(self) -> None:

    self._canvas.delete(tkinter.ALL)

    rows = int(self._width/RADIUS)
    columns = int(self._height/RADIUS)

    x_frac = 0
    y_frac = 0

    for row in self._board:
        for column in row:
            if column == NONE:
                self._draw_neutral_piece((x_frac/rows),(y_frac/columns))
                x_frac += 1
            elif column == BLACK:
                self._draw_black_piece((x_frac/rows),(y_frac/columns))
                x_frac += 1
            elif column == WHITE:
                self._draw_white_piece((x_frac/rows),(y_frac/columns))
                x_frac += 1
            else:
                x_frac = 0
        y_frac+= 1
函数(绘制)黑色(片)和(绘制)白色(片)等基本上都是相同的。他们取一个分数坐标,画出一块这种颜色。坐标由调整大小后的电路板大小决定。电路板的默认大小是每列和每行中的片数乘以半径常数,该常数设置为100

def _draw_black_piece(self, x_frac: float, y_frac: float) -> None:

    x_radius = self._canvas.winfo_width()/len(self._board[0])
    y_radius = self._canvas.winfo_height()/len(self._board)

    x1 = self._canvas.winfo_width() * x_frac
    x2 = self._canvas.winfo_width() * x_frac + x_radius
    y1 = self._canvas.winfo_height() * y_frac
    y2 = self._canvas.winfo_height() * y_frac + y_radius

    self._canvas.create_oval(x1, y1, x2, y2, fill = 'black')
这也是董事会的决定:


self.\u board=[[NONE,BLACK,NONE,WHITE,NONE],[NONE,WHITE,BLACK,NONE][NONE,NONE,NONE,NONE]]

你确定它只画了一行,还是可能画了所有的行,但都画在同一个位置?你有没有采取简单的步骤,打印出每件作品的坐标,看看坐标是否是你所期望的?是的,我试着打印出坐标,它们都是正确的。我甚至试着遍历列表的不同部分,但它仍然只显示在一行中,尽管是另一行。这不可能是真的。如果坐标正确,Tkinter绝对会在这些坐标处绘制对象。我建议您创建尽可能小的完整程序来复制此文件。将注意力集中在绘制相同颜色的所有部件上,这样您就不会试图同时调试三个几乎相同的函数。