我正在创建一个游戏与一些人工智能,可能需要一些时间。问题是,即使我在运行AI函数之前调用相关方法来更新UI,UI也不会在视觉上得到更新。
一些示例代码如下所示
def onClickBoard(self, e):
x, y = toBoardGrid(e.x(), e.y())
self.game.move(x, y)
self.update_board()
print("before AI")
# This line takes a few seconds
ai_move = self.ai.get_best_move(self.game)
print("after AI")
self.game.move(ai_move[0], ai_move[1])
self.update_board()其中,self.update_board是一种更新QWidget的方法,它非常快速。这个onClickBoard方法被分配给小部件的mouseReleaseEvent。
self.board.mouseReleaseEvent = self.onClickBoard在运行游戏时,我可以看到before AI打印到终端,但是视觉窗口没有改变。我只看到窗口更新一次,在AI提交其动作之后。
是否有办法在缓慢的函数调用之前使董事会更新一次,然后再更新一次?
发布于 2018-04-23 17:40:48
是的,您可以强制Qt处理所有挂起的事件,从而使用QApplication::processEvents()方法更新GUI。在慢速函数调用之前添加以下行:
QtWidgets.QApplication.instance().processEvents()https://stackoverflow.com/questions/49982509
复制相似问题