Ich habe eine PyQT GUI-Anwendung progress_bar.py
mit einem einzigen progressbar und einem externen Modul worker.py
mit einer process_files()
Funktion, die eine gewisse Routine mit einer Liste von Dateien funktioniert und Berichte aktuellen Fortschritt mit percent
variabel.Bericht Fortschritte QProgressBar mit Variable aus einer importierten Modul
Was ich tun möchte, ist den aktuellen Fortschritt des worker.process_files
zu berichten QProgressBar.setValue()
Methode, aber ich habe keine Ahnung, wie es zu implementieren
Hier sind meine Module (Callback-Funktion, oder was?):
progress_bar.py
import sys
from PyQt4 import QtGui
from worker import process_files
class Window(QtGui.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.setGeometry(100, 100, 300, 100)
self.progress = QtGui.QProgressBar(self)
self.progress.setGeometry(100, 50, 150, 20)
self.progress.setValue(0)
self.show()
app = QtGui.QApplication(sys.argv)
GUI = Window()
# process files and report progress using .setValue(percent)
process_files()
sys.exit(app.exec_())
worker.py
def process_files():
file_list = ['file1', 'file2', 'file3']
counter = 0
for file in file_list:
# do_stuff_with_the_file
counter += 1
percent = 100 * counter/len(file_list)
print percent
Es ist erwähnenswert, dass Sie wahrscheinlich 'QApplication.processEvents()' jedes Mal durch die Schleife aufrufen müssen, um das Fortschrittsbalkenupdate zu sehen. Solange der Hauptthread in Ihrer 'process_files'-Funktion beschäftigt ist, wird die Steuerung niemals an die Ereignisschleife zurückgegeben, um die GUI anderweitig zu aktualisieren und neu zu zeichnen. –
@ BrendanAbel Danke für's Bemerken. Etwas was ich wegen des einfachen Testfalls nicht bemerkt habe :) –