Найти - Пользователи
Полная версия: PyQt. Странности с сигналами и слотами в Windows
Начало » Python для новичков » PyQt. Странности с сигналами и слотами в Windows
1
_alexs_
Пытаюсь разобраться с одним проектом. В коде выполняются «тяжелые» расчеты. Чтобы не блокировать диалог и отображать прогресс выполнения, объекты, выполняющие расчеты помещаются в отдельный поток, а информацию о процессе передают через сигналы. Выглядит это примерно так
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()
Всё бы хорошо, но в некоторых случаях прогрессбар не обновляется своё состояние в Windows, при этом, тот же код в Linux работает и прогрессбар обновляется.

Полный код можно взять здесь. Проблема наблюдается в частности в методе startSimulation, в котором создаётся объект Simulator. В чем может быть проблема?
reclosedev
Да, это странно.
Попробуйте добавить в конец showProgress() вызов QApplication.processEvents(), для того чтобы все необработанные события в очереди выполнились.
def showProgress(self):
    self.progressBar.setValue(self.progressBar.value() + 1)
    QApplication.processEvents()
Возможно, придется добавить этот вызов и в setProgressRange().

_alexs_
Добавил processEvents() в showProgressBar и в setProgressRange — не помогло. Также попробовал добавить processEvents() в самом классе Simulator, тоже бестолку.

Если кто-то хочет покопаться, могу выложить тестовый набор данных и пошаговую инструкцию по запуску.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB