K100
K100

Reputation: 51

PyQt run time issue

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

Answers (3)

aquavitae
aquavitae

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

reclosedev
reclosedev

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

Brian B
Brian B

Reputation: 1450

It's because you run app.exec_() after the for loop executes during the tes object initialization.

Upvotes: 0

Related Questions