phil wrote: > Using Tkinter Canvas to teach High School Geometry > with A LOT of success. > > My drawing gets very slow after a lot of actions. > > For instance I have created code to rotate a set of objects > about a rotation point. > rotate 360 degrees starts to get slow > after 720 degrees its crawling. > > I checked the item list with with find_all: IT GROWS! > > OK, I create 3 lines using a line Class I created. > When I rotate these 3 lines thru 360 degrees it creates > 360 lines times 3. But each new instance of line REPLACES > the old instance. The line class has a destructor to delete > the drawn object. > > class line: > count = 0 > def __init__(s,glob,argl,color=''): > line.count = line.count + 1 > ## > ## buncha code here > ## > s.obj = glob.can.create_line(x0,y0,x1,y1, > width=glob.width,fill=s.color) > def __del__(s): > line.count = line.count - 1 > > ## delete the line object if the > ## class instance is deleted > s.glob.can.delete(s.obj) > > > After the rotation I check line.count and it is 3 > But find_all returns a tuple ofover 1000 items. > The drawn objects are not being deleted. > Which is kinda weird because the rotation works. > That is they appear to be deleted. > > Is find_all() fooling me? > Is this the reason drawing slows down? Is it refreshing > invisible objects? > > This slowing down also occurs when I draw a lot of objects. > Lets say I draw a sine wave, say 1000 individual points. > If I draw 4 or 5 sine waves it gets really slow. > > I should mention I call update() after each drawing action. > This is necessary for the students to watch the progress. > I might be drawing objects in a lengthy loop and without > update() they only appear at the end of the loop. > > Thanks for any help. > > -- Confused > >
Phil, I seem to remember a thread a while ago about a 'bug' with the Tk Canvas widget keeping a reference to objects that had been deleted... Have you thought about using the 'move' method to move your lines? I think this will result in less supprises... pydoc Tkinter.Canvas <snip> | move(self, *args) | Move an item TAGORID given in ARGS. | <snip> You could even make it a method of your line class Martin -- http://mail.python.org/mailman/listinfo/python-list