2010-07-13 4 views
0

У меня есть прогресс, который я «mintor» с QProgessDialog в PyQt4. Основном, у меня есть цикл вроде этого:Выполнение обновления QProgressDialog, также значение не изменяется

while progressThread.isRunning(): 
    self.progressDialog.setRange(0, self.progressTotal_) 
    self.progressDialog.setValue(self.progress_) 
del self.progressDialog 

progressThread upades переменные self.progessTotal_ и self.progress_

Это работает очень хорошо, когда изменяется значение progress_ постоянно. Но для некоторых задач это не так (потому что отчет о проделанной работе не так подробно).

В результате, прогрессDialog показывает серое окно, пока что-то не изменится. Могу ли я вставить что-то в цикл while, который заставляет progressDialog обновляться и ничего не меняется?

Спасибо! nathan

ответ

0

Вы должны подключить сигнал обновления от вашего потока к диалоговому окну. Вы блокируете поток пользовательского интерфейса с помощью своего цикла. Вы можете добавить вызов QApplication :: processEvents в цикле, но просто не блокируйте поток пользовательского интерфейса, и все будет в порядке.

+0

Эй, Спасибо, это имеет смысл. У меня проблемы с этим. Я знаю, как я могу подключить сигнал к функции python. Но как я могу создать свой собственный сигнал, подключить его к слоту setProgress и вызвать его из потока? – Nathan

+0

@Nathan http://www.commandprompt.com/community/pyqt/x1408 Взгляните на пример 7-7. Извлеките свой сигнал из своего подкласса QThread. –