Fortschrittsanzeige nicht aktualisiert während des Betriebs
in meinem python-Programm zum uploaden einer Datei auf dem internet, im mit einem GTK Fortschrittsbalken zeigt den upload-Fortschritt. Aber die Probleme, die im gegenübersehen, ist, dass der Fortschrittsbalken zeigt keine Aktivität, bis der upload abgeschlossen ist, und dann ist es schlagartig zeigt der upload abgeschlossen ist. im mit pycurl, um die http-Anfragen...meine Frage ist, -
brauche ich eine multi-threaded-Anwendung, um die Datei hochzuladen und gleichzeitig update der gui? oder ist es ein Fehler, dass ich das machen?
Vielen Dank im Voraus!
InformationsquelleAutor Pranav | 2009-01-30
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werde ich zitieren, die PyGTK FAQ:
Mehr als wahrscheinlich, dass das Problem ist, dass in Ihrem Fortschritt Rückruf, das ist, wo ich vermute, du bist die Aktualisierung der Fortschrittsanzeige, Sie sind nicht so ein Aufruf zum manuellen aktualisieren der Anzeige, also laufen Sie durch das GUI-event-Schleife. Dies ist nur eine Spekulation aber, wenn Sie mehr code, es könnte sein leichter zu schmal es unten weiter.
Der Grund, warum Sie brauchen, um manuell aktualisieren Sie die Anzeige, weil Ihr Haupt-thread ist auch die Durchführung der laden, wo es blockiert wird.
In python 2.x integer-Operanden Ergebnis in der integer-division. Versuchen Sie dies:
Ja, werden Sie wahrscheinlich benötigen, Parallelität und ja threads sind ein Ansatz, aber wenn Sie tun, verwenden Sie threads, bitte verwenden Sie eine Methode wie diese: http://unpythonic.blogspot.com/2007/08/using-threads-in-pygtk.html die abstrakten Weg der Schmerzen und damit Sie den Fokus auf die wichtigen Aspekte.
(Ich habe nicht wiederholt, alles, was in diesem blog-post durch Faulheit, also community-wiki).
Eine option, wenn Sie nicht verheiratet pycurl, ist die Verwendung von GObject s IO watchers.
http://pygtk.org/pygtk2reference/gobject-functions.html#function-gobject--io-add-watch
Kann man dadurch interleave file-upload mit dem normalen PyGTK-event-Schleife, und sogar die set_progress nennen Sie in Ihrer IO-Uhr-Rückruf. Wenn Sie die Verschiebung all der Arbeit für das hochladen auf pycurl ist dies nicht wirklich möglich, aber wenn Sie nur das hochladen einer Datei über HTTP, io_add_watch wird über eine socket-für so viel weniger schmerzhaft als gut.