Python PyQt运行时问题
我希望我的代码通过显示qtwidget然后运行forloop来运行, 但它运行forloop,然后向我显示我的小部件。为什么会这样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):
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()
时,您强制它手动清除队列。