PyQt5 UI长时间操作

时间:2018-04-23 13:34:22

标签: python-3.x pyqt pyqt5

我用一些人工智能创建游戏可能需要一些时间。问题是即使我在运行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提交动作之后,我看到窗口只更新了一次。

有没有办法让电路板在慢速函数调用之前更新一次,而另一次更新一次?

1 个答案:

答案 0 :(得分:0)

是的,您可以强制Qt处理所有待处理事件,从而使用QApplication::processEvents()方法更新GUI。在慢速函数调用之前添加以下行:

QtWidgets.QApplication.instance().processEvents()