from Tkinter import *
from functools import partial
def onCanvasClick(event,canvas,i):
if i>4:
canvas.create_rectangle(0,0,729,729, outline=\'black\', fill=\'black\')
canvas.bind(\'<ButtonPress>\', partial(onCanvasClick,canvas=canvas,i=0))
else:
vicsek(0,0,729,729,canvas,i+1)
canvas.bind(\'<ButtonPress>\', partial(onCanvasClick,canvas=canvas,i=i+1))
def vicsek(x1,y1,x2,y2,canvas,i):
if i>0 :
lx1=x1 + (x2-x1)/3
lx2=x1 + 2*(x2-x1)/3
ly1=y1 + (y2-y1)/3
ly2=y1 + 2*(y2-y1)/3
canvas.create_rectangle(x1,y1,lx1,ly1, outline=\'white\', fill=\'white\')
canvas.create_rectangle(lx2,y1,x2,ly1, outline=\'white\', fill=\'white\')
canvas.create_rectangle(x1,ly2,lx1,y2, outline=\'white\', fill=\'white\')
canvas.create_rectangle(lx2,ly2,x2,y2, outline=\'white\', fill=\'white\')
vicsek(lx1,y1,lx2,ly1,canvas,i-1)
vicsek(x1,ly1,lx1,ly2,canvas,i-1)
vicsek(lx1,ly1,lx2,ly2,canvas,i-1)
vicsek(lx2,ly1,x2,ly2,canvas,i-1)
vicsek(lx1,ly2,lx2,y2,canvas,i-1)
window = Tk()
window.title(\'Vicsek Fractal\')
canvas = Canvas(window, width=729, height=729,bg=\'black\')
canvas.pack()
i=0
vicsek(0,0,729,729,canvas,0)
canvas.bind("<ButtonPress>", partial(onCanvasClick,canvas=canvas,i=i))
window.mainloop()