[Python-de] Tkinter + Python ftplib

Martin v. Loewis martin at loewis.home.cs.tu-berlin.de
Fri Sep 21 09:26:32 EDT 2001


> Dies funktioniert auch wunderbar solange ich z.B. eine lokale
> Directory browse und das ganze graphisch über Canvas ausgebe. Wenn
> ich dagegen mit Hilfe von ftplib das gleiche auf einem ftp-server
> mache, dann ist die gesamte Ausgabe, sowohl nach stdout als auch der
> oben beschriebene Cursor, bis zur Beendigung der ftp-Operation
> gehemmt.

Damit Tk die Fenster aktualisieren kann (beispielsweise wenn sie
verdeckt waren und neu aufgedeckt werden), muss die Ereignisschleife
laufen. Falls man nebenbei noch was anderes machen will, gibt es mehrere
Möglichkeiten:

a) man aktualisiert die Fenster "von Zeit zu Zeit". Das macht man mit
   Misc.update(), was man beispielsweise am root-Fenster ruft. Bei
   ftplib bietet sich an, den callback-Parameter von
   retrlines/retrbinary zu verwenden; dann erfolgt die Aktualisierung
   jedesmal, wenn man blocksize Daten empfangen hat.

b) man führt die andere Aktion (ftp download) in einem separaten
   Thread aus. Vorsicht: Tk-Aktionen sollten stets vom gleichen Thread
   aus durchgeführt werden, der andere Thread sollte sich lediglich
   mit ftp download beschäftigen.

c) man integriert die FTP-Sockets in die Tk-Eventloop. Dazu muss man
   tk.createfilehandler verwenden. Leider funktioniert das (1) nur auf
   Unix und (2) nicht ohne weiteres mit ftplib, da ftplib nicht
   callback-basiert arbeitet.

Ciao,
Martin




More information about the Python-de mailing list