Tkinter weirdness item count

phil phillip.watts at anvilcom.com
Fri Apr 29 15:01:04 EDT 2005


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





More information about the Python-list mailing list