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?

È stato utile?

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ì:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top