![]() |
|||
| 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()