我正在使用Tkinter为GUI实现Python的Reversi / Othello棋盘游戏。问题在于,当玩家进行移动时,我希望每个棋子都以时间间隔绘制。因此,如果要绘制3张光盘,我想要绘制第一张光盘,然后是x ms之后的第二张光盘,依此类推。
def draw_game(self,delay=True):
# indexes of pieces on the board
idxs = np.where(self._gameImage >0);
for (row,column) in zip(idxs[0],idxs[1]):
# Convert row,column to canvas coordinates
x1,y1,x2,y2 = self.convert_idx(col=column-1,row=row-1)
if delay:
#draw pieces with 500ms delay in between
self.after(500,self.draw_piece,row,column)
else:
self.draw_piece(row,column)
# function that draws a single piece(disc) on the board
def draw_piece(self,row,column):
x1,y1,x2,y2 = self.convert_idx(col=column-1,row=row-1)
self.canvas.create_oval(x1,y1,x2,y2,fill=self.number_to_color(self._gameImage[row,column]))
因此可以预期每件作品将在当前和下一件之间以500毫秒的时间间隔绘制。相反,当我运行代码时,初始时间间隔为500毫秒,然后立即绘制所有部分。我试着用-u运行,但行为是一样的。有帮助吗?这应该很简单
答案 0 :(得分:0)
我认为你的位置是:
self.after(500,self.draw_piece,row,column)
需要移动到draw_piece()函数的末尾。这是另一个展示展示位置的问题。 Tkinter understanding after() 它应该回调它正在使用的函数。
# function that draws a single piece(disc) on the board
def draw_piece(self,row,column):
x1,y1,x2,y2 = self.convert_idx(col=column-1,row=row-1)
self.canvas.create_oval(x1,y1,x2,y2,fill=self.number_to_color(self._gameImage[row,column]))
self.after(500,self.draw_piece,row,column)