我用一些人工智能创建游戏可能需要一些时间。问题是即使我在运行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提交动作之后,我看到窗口只更新了一次。
有没有办法让电路板在慢速函数调用之前更新一次,而另一次更新一次?
答案 0 :(得分:0)
是的,您可以强制Qt处理所有待处理事件,从而使用QApplication::processEvents()方法更新GUI。在慢速函数调用之前添加以下行:
QtWidgets.QApplication.instance().processEvents()