On 10/12/07, Evjen Halverson <[EMAIL PROTECTED]> wrote: > I have tried to make a Tkinter program make a rectangle move down the > window, but did not succeed. All it does is make a rectangle trail. > What am I doing wrong? > > from Tkinter import* > root = Tk() > RectangleColor='orange' > Background=tk_rgb = "#%02x%02x%02x" % (100, 255, 100) > root.geometry('1000x800+0+0') > root.title("Moving Object Test") > w = Canvas (root,width=1000,height=800,bg=Background) > w.grid() > import time > t1=time.time() > t2=t1 > ti=t2-t1 > x=100 > y=0 > a=0 > rect=Canvas.create_rectangle(w,x,y,200,100,fill=RectangleColor) > > > > def CLS(): > > cls=Canvas.create_rectangle(w,0,0,1000,800,fill=Background) > while ti<10: > t2=time.time() > ti=t2-t1 > y=y+10 > > Canvas.create_rectangle(w,x,y,200,100,fill=RectangleColor) > > st1=time.time() > st2=st1 > subti=st2-st1 > root.mainloop() > time.sleep(100) > > while subti<1: > st2=time.time() > subti=st2-st1 > a=a+1 > CLS() > > # > rect=Canvas.create_rectangle(w,x,y,1000,800,fill=RectangleColor) > > > > root.mainloop() > > quit()
Tkinter canvas works a little different than say, openGL or pygame. You don't have to draw the rectangle over and over for each frame. Every time you call create_rectangle you are creating another rectangle. Another thing to note is that Tkinter has a built in scheduler. You don't need to use time. The way you are calling Canvas looks a little funny to me also. Anyway, here is a simple example: [code] import Tkinter as tk rectanglecolor = 'orange' background = tk_rgb = "#%02x%02x%02x" % (100, 255, 100) disty = 6 root = tk.Tk() root.geometry('1000x800+0+0') root.title("Moving Object Test") can = tk.Canvas (root,width=1000,height=800,bg=background) can.grid() # note that rect is actually just an integer that is used to identify that shape in the # context of the canvas that it was created within. rect = can.create_rectangle(400,0,600,200,fill=rectanglecolor) for i in range(100): # move the rectangle 0 in the x direction and disty in the y direction. can.move(rect, 0, disty) root.update() # update the display root.after(30) # wait 30 ms root.mainloop() # this just keeps the window open [/code] Matt -- http://mail.python.org/mailman/listinfo/python-list