2009-04-09 4 views
2

schreibe ich getan wird allgemein Python scipts Konvertierungsaufgaben für mich zu tun und wann immer ich schreibe, eine, die eine, während ich bar verwenden diese nur geringe Fortschritte nimmt esWie kann ich diesen Fortschritt Bar in der Nähe, wenn es

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_() 
zu überprüfen

ich habe 2 Fragen:

Wie kann ich es selbst machen schließen, wenn es 100% erreicht auch

(es bleibt offen, und wenn Sie den python-Shell zu schließen, bevor die X-Taste Sie es anklicken zum Absturz bringen.) Wenn es verliert und wieder scharf wird, hört es auf p korrekt ansprechen. Der Prozess wird bis zur Fertigstellung fortgesetzt, aber der Fortschrittsbalken ist vollständig weiß. Wie gehe ich damit um? automatisch

Antwort

4

Nun, da Sie Ihre Maximum bis 10, Ihre Fortschrittsbalken gesetzt sollte 100% nicht erreichen, weil

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

wird bis 9.

Fortschritt iterieren bis nur Bars in der Nähe nicht. Sie müssen anrufen

barra.hide() 

nach Ihrer Schleife.

Was das Malproblem angeht, liegt es wahrscheinlich daran, dass das Script, von dem Sie dieses Skript ausführen, sich im selben Thread befindet wie der Fortschrittsbalken. Wenn Sie also weg und zurück schalten, werden die Paint-Events durch die eigentliche Verarbeitung des Parent-Skripts verzögert. Sie können entweder einen Timer einstellen zu .update periodisch() aufrufen oder .repaint() auf ‚barra‘ (update() wird über repaint empfohlen()) OR würden Sie Ihre Haupt-Verarbeitungscode wollen in einem QThread laufen, die ist auch in dem PyQt Code zur Verfügung, aber das wird einige Lesung auf Ihrer Seite :)

die doc für Qt ist, aber es gilt für PyQt auch benötigen:

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

Verwandte Themen