2010-07-13 10 views
0

J'ai une progression que je "mintor" avec un QProgessDialog dans PyQt4. Basiquement, j'ai une boucle comme ceci:Mise à jour de QProgressDialog, aussi la valeur ne change pas

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

Le progressThread upades les variables self.progessTotal_ et self.progress_

Cela fonctionne assez bien, lorsque la valeur des changements de progress_ constamment. Mais pour certaines tâches, ce n'est pas le cas (parce que le rapport d'avancement n'est tout simplement pas détaillé).

Le résultat est, le progressDialog montrant une fenêtre grise jusqu'à ce que quelque chose change. Puis-je insérer quelque chose dans la boucle while, qui force le progressDialog à se mettre à jour et rien ne change?

Merci! nathan

Répondre

0

Vous devez connecter un signal de mise à jour de votre thread à la boîte de dialogue de progression. Vous bloquez le thread d'interface utilisateur avec votre boucle. Vous pouvez ajouter un appel QApplication :: processEvents dans la boucle, mais ne bloquez pas le thread d'interface utilisateur et tout ira bien.

+0

Hey, Merci, c'est logique. J'ai du mal à le faire. Je sais comment je peux connecter un signal à une fonction python. Mais comment puis-je créer mon propre signal, le connecter au slot setProgress et l'appeler depuis le thread? – Nathan

+0

@Nathan http://www.commandprompt.com/community/pyqt/x1408 Regardez l'exemple 7-7. Emettez votre signal de votre sous-classe QThread. –