Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 3, 2013 10:38:01

_alexs_
Зарегистрирован: 2012-04-02
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt. Странности с сигналами и слотами в Windows

Пытаюсь разобраться с одним проектом. В коде выполняются «тяжелые» расчеты. Чтобы не блокировать диалог и отображать прогресс выполнения, объекты, выполняющие расчеты помещаются в отдельный поток, а информацию о процессе передают через сигналы. Выглядит это примерно так

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. В чем может быть проблема?

Офлайн

#2 Июнь 3, 2013 11:33:11

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PyQt. Странности с сигналами и слотами в Windows

Да, это странно.
Попробуйте добавить в конец showProgress() вызов QApplication.processEvents(), для того чтобы все необработанные события в очереди выполнились.

def showProgress(self):
    self.progressBar.setValue(self.progressBar.value() + 1)
    QApplication.processEvents()
Возможно, придется добавить этот вызов и в setProgressRange().

Офлайн

#3 Июнь 4, 2013 09:09:00

_alexs_
Зарегистрирован: 2012-04-02
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt. Странности с сигналами и слотами в Windows

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

Если кто-то хочет покопаться, могу выложить тестовый набор данных и пошаговую инструкцию по запуску.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version