[Python-de] pyQt4 QTextEdit
Uwe Wilske
wnf at wlsoft.de
So Aug 10 14:23:48 CEST 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