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

时间:2014-06-02 21:09:31

标签: python for-loop tkinter drawing

我正在尝试为我用Python制作的othello游戏制作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

函数_draw_black_piece,_draw_white_piece等基本上都是一样的。它们采用小数坐标并绘制一块颜色。坐标由调整后的电路板大小决定。电路板的默认大小是每列中的片段数和行乘以RADIUS常量(设置为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._board = [[无,黑,无,白],[无,黑,白,无],[无,白,黑,无] [无,无,无,无]]

0 个答案:

没有答案