from Tkinter import * def run(): root = Tk() global canvas canvas = Canvas(root, width = 400, height = 300) canvas.pack() #root.resizable(width=0,height=0) class Struct: pass canvas.data = Struct() init() drawball() root.mainloop() def init(): canvas.data.x0 = 10 # initial left-most edge of ball canvas.data.y0 = 10 # initial top-most edge of ball canvas.data.x1 = 50 # initial right-most edge of ball canvas.data.y1 = 50 # initial bottom edge of the ball canvas.data.dx = 4 #ballx velocity canvas.data.dy = 4 #bally velocity canvas.data.colorList = ["blue","red","orange","green","purple","yellow"] canvas.data.count = 0 def drawball(): while True: canvas.create_text(150, 100, text="Taste The Rainbow!", fill="purple", font="Helvetica 26 bold underline") canvas.create_oval(canvas.data.x0,canvas.data.y0,canvas.data.x1,canvas.data.y1,fill=canvas.data.colorList[canvas.data.count]) canvas.after(20) canvas.data.x0+=canvas.data.dx canvas.data.y0+=canvas.data.dy canvas.data.x1+=canvas.data.dx canvas.data.y1+=canvas.data.dy collisionCheck() canvas.update() redrawAll() # the next function tests for collision between the ball and the wall and reverses the proper velocity. def collisionCheck(): if canvas.data.x1 >= 400: canvas.data.dx *= -1 canvas.data.count +=1 canvas.data.count = canvas.data.count % 6 if canvas.data.y1 >= 300: canvas.data.dy *= -1 canvas.data.count +=1 canvas.data.count = canvas.data.count % 6 if canvas.data.x0 <= 0: canvas.data.dx *= -1 canvas.data.count +=1 canvas.data.count = canvas.data.count % 6 if canvas.data.y0 <= 0: canvas.data.dy *= -1 canvas.data.count +=1 canvas.data.count = canvas.data.count % 6 canvas.data.x0 += canvas.data.dx canvas.data.x1 += canvas.data.dx canvas.data.y0 += canvas.data.dy canvas.data.y1 += canvas.data.dy def redrawAll(): canvas.delete(ALL) run()