Ich versuche gtk.ProgressBar.set_text('Text')
zu arbeiten, wenn ich auf eine Schaltfläche klicke, vorher, um meine subprocess
zu starten.PyGTK ProgressBar, um etwas anzuzeigen, bevor der Subprozess startet
Hier ist mein Code (vollständige Quelle here):
def on_button_clicked(self, button, progress_bar, filename):
self.execute(progress_bar, filename)
def execute(self, progress_bar, filename):
progress_bar.set_text('Encoding')
progress_bar.pulse()
cmd = ['ffmpeg', '-y',
'-i', filename,
'-r', '30',
'/tmp/test-encode.mkv']
process = sp.Popen(cmd, stdout=sp.PIPE, stderr=sp.PIPE)
process.wait()
progress_bar.set_text('Done')
Ich versuchte progress_bar.set_text('Encoding')
in on_button_clicked()
bewegen, aber es ändert nichts: ich auf die Schaltfläche klicken, wird der Auftrag erledigt (die Datei ordnungsgemäß hergestellt wird und OK) und nur dann zeigt der Fortschrittsbalken "Fertig" an.
Ich habe meine Hausaufgaben gemacht und alle damit verbundenen Fragen gelesen, aber sie verwenden entweder subprocess nicht, oder analysieren "normale" Befehlsausgaben.
'process.wait()' blockiert höchstwahrscheinlich GUI-Aktualisierungen. Versuchen Sie stattdessen mit 'waitAsync'. – Ilya
Wo ist diese waitAsync-Funktion dokumentiert (wenn möglich in einem Python-Kontext)? Ich glaube, ich muss process.wait (eine Subprozessmethode) verwenden, um das Ganze zum Laufen zu bringen. Ich könnte hinzufügen, wie kann es alles blockieren * bevor * es überhaupt beginnt? Denn, nun, zumindest sollte ich die Fortschrittsanzeige "Encoding" sehen, auch wenn der Balken nicht pulsiert ..? Ich denke nicht, dass dies ein GUI-Aktualisierungsproblem ist, IMHO. – yPhil
http://api.gtkd.org/src/gio/Subprocess.html – Ilya