Question

J'écris couramment Python scipts pour effectuer des tâches de conversion pour moi et chaque fois que j'écris un qui prend un certain temps j'utilise ce petit barre de progression pour vérifier ce

import sys
import time
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
barra = QtGui.QProgressBar()
barra.show()
barra.setMinimum(0)
barra.setMaximum(10)
for a in range(10):
    time.sleep(1)
    barra.setValue(a)
app.exec_()

J'ai 2 questions:

Comment puis-je faire se fermer quand il atteint 100% (Il reste ouvert et si vous fermez le shell python avant de cliquer sur le bouton X vous crasher.)

aussi, quand il perd et regagne le focus, il cesse de peindre correctement. le processus continuera d'achèvement, mais l'espace de barre de progression est tout blanc. Comment puis-je gérer cela?

Était-ce utile?

La solution

Eh bien, parce que vous définissez votre maximum à 10, votre barre de progression ne devrait pas atteindre 100% parce que

for a in range(10):
  time.sleep(1)
  barra.setValue(a)

ne fera que itérer jusqu'à 9.

Les barres de progression ne se ferment pas automatiquement. Vous devrez appeler

barra.hide()

après la boucle.

En ce qui concerne le problème de la peinture, il est probable que tout script que vous avez exécuté ce script est dans le même fil que la barre de progression. Donc, lorsque vous passez loin et en arrière les événements de peinture sont retardés par le traitement réel du script parent. Vous pouvez régler une minuterie pour appeler périodiquement .update () ou .repaint () sur « barra » (mise à jour () est recommandé repeindre ()) ou vous voulez que votre code principal de traitement pour exécuter dans un QThread, qui est également disponible dans le code de PyQt, mais cela nécessitera une certaine lecture de votre part:)

Le doc est de Qt, mais il applique à PyQt ainsi:

https://doc.qt.io/qt-4.8/threads.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top