Форум сайта python.su
0
Пытаюсь разобраться с одним проектом. В коде выполняются «тяжелые» расчеты. Чтобы не блокировать диалог и отображать прогресс выполнения, объекты, выполняющие расчеты помещаются в отдельный поток, а информацию о процессе передают через сигналы. Выглядит это примерно так
self.thread = QThread() self.simulator = Simulator(...) self.simulator.moveToThread(self.thread) self.thread.started.connect(self.propagateSimulation) self.simulator.rangeChanged.connect(self.setProgressRange) self.simulator.updateProgress.connect(self.showProgress) self.simulator.simFinished.connect(self.simulationDone) self.thread.start()
Офлайн
173
Да, это странно.
Попробуйте добавить в конец showProgress() вызов QApplication.processEvents(), для того чтобы все необработанные события в очереди выполнились.
def showProgress(self): self.progressBar.setValue(self.progressBar.value() + 1) QApplication.processEvents()
Офлайн
0
Добавил processEvents() в showProgressBar и в setProgressRange — не помогло. Также попробовал добавить processEvents() в самом классе Simulator, тоже бестолку.
Если кто-то хочет покопаться, могу выложить тестовый набор данных и пошаговую инструкцию по запуску.
Офлайн