Frage

Ich schreibe häufig Python scipts Konvertierungsaufgaben für mich zu tun und wann immer ich schreibe, eine, die eine während ich diese kleinen Fortschrittsbalken zu überprüfen, auf sie

nimmt
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_()

Ich habe 2 Fragen:

Wie kann ich es machen schließt selbst wenn es 100% erreicht (Es bleibt offen, und wenn Sie den Python-Shell zu schließen, bevor die X-Taste, klicken Sie es zum Absturz bringen.)

Auch wenn es verliert und gewinnt Fokus, es hört auf zu malen richtig. der Prozess wird bis zum Abschluss fortgesetzt, aber der Fortschrittsbalken Raum ist alles weiß. Wie gehe ich das?

War es hilfreich?

Lösung

Nun, da Sie Ihr Maximum auf 10 gesetzt, Ihre Fortschrittsbalken sollten 100% nicht erreichen, weil

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

wird nur durchlaufen bis zu 9.

Fortschrittsbalken schließen nicht automatisch. Sie werden verlangen

barra.hide()

nach der Schleife.

Wie für die Farbe Problem, es ist wahrscheinlich, weil unabhängig von Skript Sie dieses Skript liefen von im selben Thread wie der Fortschrittsbalken ist. Also, wenn Sie wechseln weg und zurück, um die Farbe Ereignisse werden von der eigentlichen Verarbeitung der Mutter Skript verzögert. Sie können entweder einen Timer einstellen .update periodisch () aufrufen oder .repaint () auf ‚barra‘ (update () wird über repaint empfohlen ()) ODER Sie würden Ihre Hauptverarbeitungscode ausgeführt werden soll in einem QThread, die auch in dem PyQt-Code ist, aber das wird einige Lesung auf Ihrer Seite:)

Der Doc ist für Qt, aber es gilt auch für PyQt auch:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top