HSG |
|
Tkinter ist nicht thread-sicher, dh. der Versuch, aus einem thread auf widgets zuzugreifen führt früher oder später zu einem Absturz.
Die meisten Widgets verfügen über eine Methode after(ms,func[,argl[,..]]), die nach ms Millisekunden die Funktion func aufruft. Eventuelle Parameter werden in eine optionalen Liste argl übergeben. after gibt eine id zurück, über die mit after_cancel(id) der after-Aufruf abgebrochen werden kann.
# -*- coding: iso-8859-1 -*- # mk, 14.1.09 def ein(event): global y y=y-dy def aus(event): global y y=y+dy # view from Tkinter import * f = Tk() f.title('Oszilloskop mit Taster') f.geometry('800x600') c = Canvas(master=f, width=800, height=600) c.place(x=0,y=0) b = Button(master=f,text='Taster') b.place(x=10,y=10) b.bind('<Button-1>',ein) b.bind('<ButtonRelease>',aus) # control x = 10 y = 60 dy = 20 xalt = x def tuewas(): global x,y,xalt,c xalt = x x = x + 1 if x >= 790: y=y+3*dy xalt = 20 x = 20 c.create_line(xalt,y,x,y) c.after(20,tuewas) # rekursiver Aufruf # GUI starten c.after(0,tuewas) # erster Start f.mainloop()