[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