Destructor Woes, was Advice needed on __del__
phil
phillip.watts at anvilcom.com
Tue May 10 13:21:39 EDT 2005
> Then i got a tip that you can register a function that needs to be
> called when the object is going to be deleted.
> For instance to register a function __exit, you do this:
>
Here is the complete line class with your suggestion:
Below is the output.
Nice idea, maybe I did something wrong?
class line:
def __init__(s,glob,argl,color=''):
atexit.register(s.__exit)
s.glob = glob
s.type = 'line'
s.color = color
if not s.color: s.color = glob.color
if len(argl) == 2:
wobj = glob.objs[ argl[0] ][0]
s.x0 = a0 = wobj.x
s.y0 = b0 = wobj.y
wobj = glob.objs[ argl[1] ][0]
s.x1 = a1 = wobj.x
s.y1 = b1 = wobj.y
elif len(argl) == 4:
s.x0 = a0 = float( argl[0] )
s.y0 = b0 = float( argl[1] )
s.x1 = a1 = float( argl[2] )
s.y1 = b1 = float( argl[3] )
else: return
s.midx = (s.x0 + s.x1) / 2
s.midy = (s.y0 + s.y1) / 2
s.len = sqrt( (s.x1 -s.x0)**2 + (s.y1 -s.y0)**2 )
if (s.y1 -s.y0) == 0: s.slope = 0
elif (s.x1 -s.x0) == 0: s.slope = 999999
else: s.slope = ( (s.y1 -s.y0) / (s.x1 -s.x0) )
# center point of graph is 400,300
# scale is no of pixels per unit of measure
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 __exit(s):
print 'exit'
s.glob.can.delete(s.obj)
# def __del__(s):
# s.glob.can.delete(s.obj)
exit
Error in sys.exitfunc:
Traceback (most recent call last):
File "/usr/local/lib/python2.3/atexit.py", line 20, in _run_exitfuncs
func(*targs, **kargs)
File "./graph.py", line 972, in __exit
s.glob.can.delete(s.obj)
File "/usr/local/lib/python2.3/lib-tk/Tkinter.py", line 2085, in delete
self.tk.call((self._w, 'delete') + args)
_tkinter.TclError: invalid command name ".1076354284"
More information about the Python-list
mailing list