[Python-de] pyQt4 QTextEdit

Uwe Wilske wnf at wlsoft.de
So Aug 10 12:23:48 UTC 2008


Andreas Pakulat schrieb:
> On 09.08.08 15:13:37, Uwe Wilske wrote:
> 
> 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.

danke für den Tipp. Auf die schnelle habe ich mich für "quick&dirty" 
Methode entschieden und die auch funktioniert.

Was ich nicht verstehe, warum Sie so "dirty" ist. Ich gebe an einer von 
mir festgelegten Stelle im Programmablauf der Anwendung Zeit die 
anstehenden Events abzuarbeiten. Da die Anzeige nach dem Kopieren 
erfolgt, dürfte doch eigentlich nichts passieren:

     def anzeige(self,s):
         #Anhängen der Meldung an QTextEdit
         self.me_Status.append(s)
         #Der Anwendung Zeit geben die Änderung von QTextEdit anzuzeigen
         app.processEvents()
         print s

     def download(self, aQuellpfad, aZielpfad):
         self.anzeige('Download beginnt')
         y = os.listdir(aQuellpfad)
         y.sort()
         for dateiname in y:
             qdn = '%s%s' % (aQuellpfad,dateiname)
             zdn = '%s%s' % (aZielpfad,dateiname)
             shutil.copyfile(qdn,zdn)
             self.anzeige('%s -> %s' % (qdn,zdn))
             self.Anzahl=self.Anzahl+1
         self.anzeige('%d Dateien kopiert.' % (self.Anzahl))

Im schlimmsten Fall kann das Programm beendet werden, dann ist die 
letzte Kopie aber bereits abgeschlossen.

Oder sehe ich da etwas falsch?

-- 
Uwe Wilske





Mehr Informationen über die Mailingliste python-de