[python-users] Tkinterprobleme

Thomas Lenarz tommesml at netcologne.de
So Mai 27 18:26:32 CEST 2007


prof. dr. peter ziese schrieb:

> 2) Wie lann ich das ändern, damit ich die Grafik kontrolliert langsamer 
> ablaufen lassen kann? 
Hallo zusammen,

ich wollte zu der Tkinter-Mainloop-Diskussion noch eine Ergänzung liefern.

Am 25.05.2007 lief ein Thread zum gleichen Thema auf comp.lang.python, in dem eine 
weitere sehr einfache Variante geliefert wurde, das Problem zu lösen (vgl. 
http://groups.google.de/group/comp.lang.python/browse_frm/thread/bbee2f386de98dfd/6ce4
0a7a20b51605?lnk=st&q=%22Tkinter+help%22&rnum=1&hl=de#6ce40a7a20b51605).

Es gibt die Methode Tk.update(), mit der man Tk dazu veranlassen kann, explizit die 
Message-Queue abzuräumen und die Ereignisse zu verteilen. Das gibt einem die 
Möglichkeit, fachliche Logik mit der Nachrichtenverarbeitung zu kombinieren:

<python>
# strahlenkranz
from Tkinter import *
from math import *
from time import *

fenster=Tk()
fenster.title('strahlenkranz')
breite=600
hoehe=300

c=Canvas(fenster,width=breite,height=hoehe)
c.pack()
for z in range(1,180):
    strahl=c.create_line(breite/2,hoehe/2,breite/2+180*cos(z),hoehe/2+60*sin(z),fill='red')
    fenster.update() # <--- Einfuegung hier
    sleep(0.01)
</python>

Für solch kleine Beispiele, wo keine oder nur ganz wenige Ereignisse verarbeitet werden, ist 
das bestimmt eine schöne Variante. Generell hebelt diese Vorgehensweise, abhängig von 
dem Wert des sleep()-Aufrufes, aber die Ereignisverarbeitung aus. Zum Ausprobieren 
einfach mal den sleep-Wert auf 4.0 ändern und dann versuchen das Fenster zu vergrößern, 
zu maximieren oder zu minimieren. Unter meinem Windows-ME werden diese Aktionen 
dann nur verzögert bearbeitet.

Siehe zu dem Thema auch:

http://www.cs.caltech.edu/courses/cs11/material/python/lab5/lab5.html

Im Abschnitt: Writing the event loop

Viele Grüße und noch schöne Pfingsten
Thomas

-- 
mailto:Thomas.Lenarz at netcologne.de
mailto:Thomas.Lenarz at koeln.de






Mehr Informationen über die Mailingliste python-users