from Tkinter import *
from numpy import *
import time, Image, ImageTk

SIZE = 500
ngrid = 100
u = zeros((ngrid, ngrid))
alpha = 1.7

#Boundary conditions:
for i in range(0, ngrid, 1):
	u[ngrid-1,i]=1
	u[i,ngrid-1]=-1

def paint(parent,canvas):
	global u, alpha   
	for i in range(1, ngrid-1, 1):
		for j in range(1, ngrid-1, 1):
			u[i][j] = (1.0-alpha)*u[i][j]+alpha*0.25*(u[i+1][j]+u[i-1][j]+u[i][j+1]+u[i][j-1])
	#Tkinter-----
	intensity = uint32(255*(1+u)/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)
	#Tkinter-----
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()
