PyQt运行时问题

K10*_*100 3 python qt pyqt

我希望我的代码通过显示qtwidget然后运行forloop来运行,但它运行forloop然后向我显示我的小部件.为什么是这样?

class tes(QWidget):

    def __init__(self):
        super(tes, self).__init__()
        self.initUI()
        for i in range (1000000):
            print("s")

    def initUI(self):
        t = QTableWidget(8,8,self)        
        self.show()
        self.resize(1000,1000)
        t.setGeometry(0,0,500,500)
        t.show()

def main():
    app = QApplication(sys.argv)
    t = tes()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

rec*_*dev 10

QApplication.processEvents()循环前添加.您的小部件将显示,但无响应.要使应用程序响应,请将processEvents()调用添加到循环的某些步骤.

例:

def __init__(self):
    super(tes, self).__init__()
    self.initUI()
    QApplication.processEvents()
    for i in range (1000000):
        if not i % 3:  # let application process events each 3 steps.
            QApplication.processEvents()
        print("s")
Run Code Online (Sandbox Code Playgroud)

  • 更具体地说,当您调用 `self.initUI()` 时,正在生成的事件(例如 showEvent)正在排队进入事件队列,但事件循环尚未启动。当你调用 `processEvents()` 时,你是在强迫它手动刷新队列。 (2认同)

Bri*_*n B 0

这是因为您在对象初始化app.exec_()期间执行 for 循环之后运行tes