Desrtuctor WOES, was Advice on __del__

P

phil

you haven't answered my question, btw: why are you using __del__
to do something that the garbage collector should do for you?


After more reading it seems I have made an ass of my self on this
subject. Here is my problem at length.

I teach high school geometry. I have created a program with a
scalable graph on which to make drawings to illustrate concepts.
This is working well.


I like to MOVE the objects one pixel at a time or ROTATE them
one degree at a time so the students can follow the progress of
the lesson.

A script of a simple drawing might be:

scale 100
color red
tr1 = triangle from x y base baselength angles 30 60
rotate centerx centery degrees objlist # eg tr1

This would create an instance of triangle which would
create an instance of polygon which would create 3
instances of lines, which are point pairs.

class line:
def __init__(s,glob,argl,color=''):
s.glob = glob
:::
:::

x0 = a0 * s.glob.scale + 400
y0 = 300 - b0 * s.glob.scale
x1 = a1 * s.glob.scale + 400
y1 = 300 - b1 * s.glob.scale
s.obj = glob.can.create_line(x0,y0,x1,y1,
width=glob.width,fill=s.color)
def __del__(s):
s.glob.can.delete(s.obj)

This calls Canvas.create_line. Tkinter keeps its own list of
drawn objects. I store the ref in s.obj

NOW when I rotate the triangle 45 degrees, recomputing the points
each time, it creates 45 new instances of triangle but dels the
old one. __del__ then deletes the Canvas line object.

Without that, the list of objects grows very long,
and refresh gets slow.
This is a very complex program, 1000 lines now, propably 2000
lines eventually. There are dozens of places where I depend on
__del__ deleteting canvas objects.

SO: without significant rewrite of each class such as triangle
and line, how can I ensure those canvas lines get deleted?
You don't really need to understand Canvas, just trust me
I have to delete those objects and they are not properties of the
class which go away with garbage collection.

Thanks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

Forum statistics

Threads
473,981
Messages
2,570,188
Members
46,732
Latest member
ArronPalin

Latest Threads

Top