# Simple example of animation of a fish # swimming. This is a simplified python # adaptation of the java program # FishWinks.java # # H. J. Bernstein, 11 Jan 2011 from Tkinter import * window = Tk() canvas = Canvas(window, bg="blue", width = 400, height = 300) diameter = 60 bodycolor = "yellow" seacolor = "blue" linecolor = "red" canvas.pack() #Draw the sea with waves canvas.create_polygon(0,0,0,diameter/2.,402,\ diameter/2.,402,0,0,0,\ fill="white", outline="white") for ii in range(0,402,diameter): canvas.create_oval(ii,diameter/6,ii+diameter,\ 2*diameter/3,fill="white",outline="white") #front of the fish ledge = 402 #Draw a dorsal fin canvas.create_arc(ledge+diameter+diameter/4-diameter/3,150-2*diameter/3,\ ledge+diameter+diameter/4+diameter/3,150-diameter/3,\ start=90,extent=90,fill=bodycolor,outline=bodycolor,\ tag = 'fish') canvas.create_oval(ledge+diameter+diameter/4-diameter/6,150-2*diameter/3,\ ledge+diameter+diameter/4+diameter/6,150-diameter/3,\ fill=seacolor,outline=seacolor,tag= 'fish') #Draw the body with the mouth working canvas.create_arc(ledge,150-diameter/2,\ ledge+2*diameter,150+diameter/2,\ start=0,extent=170,fill=bodycolor,outline=bodycolor,\ tag = 'fish') canvas.create_arc(ledge,150-diameter/2,\ ledge+2*diameter,150+diameter/2,\ start=190,extent=170,fill=bodycolor,outline=bodycolor,\ tag = 'fish') canvas.create_arc(ledge,150-diameter/2,\ ledge+2*diameter,150+diameter/2,\ start=170,extent=20,fill=seacolor,outline=seacolor,\ tag = 'fishmouthup') canvas.create_arc(ledge,150-diameter/2,\ ledge+2*diameter,150+diameter/2,\ start=170,extent=20,fill=seacolor,outline=seacolor,\ tag = 'fishmouthdown') #cover the corner of the mouth canvas.create_arc(ledge+0.5*diameter,150-diameter/2,\ ledge+1.5*diameter,150+diameter/2,\ start=90,extent=180,fill=bodycolor,outline=bodycolor,\ tag = 'fish') #add a tail, make it waggle canvas.create_arc(ledge+2*diameter,150-diameter/4, \ ledge+3*diameter,150+diameter/4,\ start=90,extent=180,fill=bodycolor,outline=bodycolor,\ tag = 'fish') canvas.create_arc(ledge+2*diameter+diameter/4+1,150-diameter/2,\ ledge+5*diameter,150+diameter/2, start=90,extent=180,fill=seacolor,outline=seacolor, tag = 'fishtail') basershift=0; for i in range(0, 400+diameter*3): canvas.move('fish',-1,0 ) j = (i % 42) -10 if j > 10: j = 21-j rshift = (j*diameter)/90 k = i % 10 if (k < 5): canvas.move('fishmouthup',-1,-1) canvas.move('fishmouthdown',-1,1) else: canvas.move('fishmouthup',-1,1) canvas.move('fishmouthdown',-1,-1) canvas.move('fishtail',-1,0) if basershift > rshift: canvas.move('fishtail',-1,0) basershift = basershift-1 else: canvas.move('fishtail',+1,0) basershift = basershift+1 canvas.after(10) canvas.update()