PyQt проблема времени выполнения - PullRequest
3 голосов
/ 08 марта 2012

Я хочу, чтобы мой код запускался, показывая 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()

Ответы [ 3 ]

9 голосов
/ 08 марта 2012

Добавить 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")
0 голосов
/ 08 марта 2012

Виджет отображается только после запуска приложения, а не при его инициализации.Что именно вы пытаетесь сделать в цикле?Может быть, лучше подключить его к сигналу или обработать его в событии, но все зависит от того, что вы пытаетесь достичь.

0 голосов
/ 08 марта 2012

Это потому, что вы запускаете app.exec_() после выполнения цикла for во время инициализации объекта tes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...