Come faccio a fare questo progresso bar vicino quando è fatto
-
06-09-2019 - |
Domanda
I comunemente scrivo Python scipts per eseguire operazioni di conversione per me e ogni volta che scrivo uno che prende un po 'ho utilizzare questo piccolo barra di avanzamento per verificare su di esso
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_()
Ho 2 domande:
Come faccio a farlo chiudere in sé quando si raggiunge il 100% (Rimane aperto e se si chiude la shell Python prima di fare clic sul pulsante X si è in crash.)
Inoltre, quando si perde e riacquista attenzione, smette di dipingere in modo corretto. il processo continuerà fino al completamento ma lo spazio della barra di progresso è tutto bianco. Come faccio a gestire questa situazione?
Soluzione
Bene, perché si imposta il massimo a 10, la vostra barra di avanzamento non dovrebbe raggiungere il 100%, perché
for a in range(10):
time.sleep(1)
barra.setValue(a)
servirà solo a iterare fino a 9.
barre di avanzamento non si chiudono automaticamente. Dovrete chiamare
barra.hide()
dopo il ciclo.
Per quanto riguarda il problema della vernice, è probabile perché qualunque copione è stato eseguito questo script da è nello stesso thread come la barra di avanzamento. Così, quando si passa di distanza e eseguire la vernice eventi sono in ritardo di trattamento effettivo dello script genitore. È possibile impostare un timer per chiamare periodicamente .Update () o .repaint () sulla 'barra' (update () è consigliato nel corso repaint ()) o che si vorrebbe che il proprio codice di elaborazione principale per eseguire in una QThread, che è disponibile anche nel codice PyQt, ma che richiederà qualche lettura da parte vostra:)
Il doc è per Qt, ma si applica a PyQt così: