Reputation: 51
I want my code to run by showing the qtwidget and then running the forloop, but it runs the forloop then shows my widget to me. Why is this?
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()
Upvotes: 5
Views: 17227
Reputation: 19114
The widget is only shown once the application is running, not when its initialised. What exactly are you trying to do in the loop? It might be better to connect it to a signal or handle it in an event, but it all depends what you're trying to acheive.
Upvotes: 0
Reputation: 9502
Add QApplication.processEvents()
before loop. Your widget will be shown, but unresponsive. To make application responsive, add processEvents()
calls to some steps of your loop.
Example:
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")
Upvotes: 14
Reputation: 1450
It's because you run app.exec_()
after the for loop executes during the tes
object initialization.
Upvotes: 0