
On 09.08.08 15:13:37, Uwe Wilske wrote:
Ich nutze ein QTextEdit zur Anzeige, um den Fortschritt bei kopieren von Bildern von der Kamera auf die Festplatte anzuzeigen. Nach jedem Kopiervirgang rufe ich meine Anzeigefunktion auf:
def anzeige(self,s): self.me_Status.append(s) print s
Das print s wird sofort angezeigt, das 'self.me_Status.append(s)' jedoch erst, wenn alle Kopiervorgänge abgeschlossen sind. Wie kann ich die sofortige Anzeige erzwingen?
Indem du dem Event-Loop Zeit gibst ein paar Events zu bearbeiten. Re-Paints erzeugen nur einen neuen Paint event und stecken ihn in die Event queue, nur wenn der event-loop wieder laeuft werden GUI element aktualisiert. Mir fallen auf Anhieb 2 Wege ein das ganze hinzubekommen: - QTimer, lass einfach deine Kopiervorgaenge von einem QTimer starten, jedesmal wenn einer fertig ist startest du einen QTimer mit einem timeout von 500 ms oder so und laesst in der Zwischenzeit den Event-Loop laufen - das Kopieren in einen separaten Thread auslagern und das melden des Fortschritts ueber Queued-Signals oder Events machen Es gibt auch dir "quick&dirty" Methode, in anzeige() processEvents aufrufen, das sollte man aber nur machen wenn man weiss was man tut und sich mit Qt's eventloop gut auskennt. Das bearbeitet unter Umstaenden mehr events als man moechte (und produziert seltsames, schwer reproduzierbares Verhalten/Bugs in der Anwendung) und wird grundsaetzlich nur als letzter Ausweg empfohlen wenn die obigen Methoden nicht einsetzbar sind. Andreas -- Your true value depends entirely on what you are compared with.