#
# tkline.py
# (c) Neil Gershenfeld 2/5/05
# animate sin(kx)/kx curve with Tkinter
#

from Tkinter import *
from numarray import *

SIZE = 500
NPTS = 100
KMIN = 0.0
KMAX = 25.0
k = 0
dk = .01

x = arange(-1.0,1.0,2.0/NPTS) + 1.0/NPTS
xpath = SIZE*(x+1.0)/2.0

def paint(parent,canvas):
   global k, dk, x, xpath
   if ((k > KMAX) | (k < KMIN)):
      dk = -dk
   k += dk
   y = sin(k*x)/(k*x)
   ypath = SIZE - SIZE*(y+1.0)/2.0
   path = ravel(transpose(concatenate(([xpath],[ypath]),0)))
   canvas.coords("curve",*path)
   parent.after_idle(paint,parent,canvas)

root = Tk()
root.title('tkline')
root.bind('q','exit')
canvas = Canvas(root, width=SIZE, height=SIZE, background='white')
canvas.pack()
canvas.create_line(tag="curve",*zeros(2*NPTS))
root.after(100,paint,root,canvas)
root.mainloop()
