# # tkimage.py # (c) Neil Gershenfeld 2/10/08 # animate sin(r)/r image with Tk # from Tkinter import * from numpy import * import time, Image, ImageTk SIZE = 500 NGRID = 100 KMIN = 1.0 KMAX = 20.0 k = KMIN dk = 0.5 pts = arange(-1.0,1.0,2.0/NGRID) (x,y) = meshgrid(pts,pts) r = sqrt(x*x + y*y) z = ones(r.shape) def paint(parent,canvas): global k,dk,x,y,z,r if ((k > KMAX) | (k < KMIN)): dk = -dk k += dk z = sin(k*r)/(k*r) intensity = uint32(255*(1+z)/2.0) grayscale = (1 << 16)*intensity + (1 << 8)*intensity + (1 << 0)*intensity img = Image.fromarray(grayscale,mode="RGBX") img = img.resize((SIZE,SIZE)) tkimg = ImageTk.PhotoImage(img) canvas.create_image(SIZE/2,SIZE/2,image=tkimg) root.update() time.sleep(0.001) parent.after_idle(paint,parent,canvas) root = Tk() root.title('tkimage') root.bind('q','exit') canvas = Canvas(root, width=SIZE, height=SIZE, background='white') canvas.pack() root.after(100,paint,root,canvas) root.mainloop()