Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt运行时问题_Python_Qt_Pyqt - Fatal编程技术网

Python PyQt运行时问题

Python PyQt运行时问题,python,qt,pyqt,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):

我希望我的代码通过显示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()

这是因为您在对象初始化期间执行for循环后运行了
app.exec()。您的小部件将显示,但没有响应。要使应用程序响应,请向循环的某些步骤添加
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")

小部件仅在应用程序运行时显示,而不是在其初始化时显示。你到底想在循环中做什么?将其连接到信号或在事件中处理它可能更好,但这完全取决于您试图实现的内容。

这是因为“显示”发生在
app.exec(()
行中(即主循环启动时)。我想您需要澄清您真正想要做什么。更具体地说,当您调用
self.initUI()
时,正在生成的事件(如showEvent)正在排队进入事件队列,但事件循环尚未启动。调用
processEvents()
时,您强制它手动清除队列。