Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Tkinter weirdness item count

Reply
Thread Tools

Tkinter weirdness item count

 
 
phil
Guest
Posts: n/a
 
      04-29-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


 
Reply With Quote
 
 
 
 
David Isaac
Guest
Posts: n/a
 
      04-30-2005

"phil" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Using Tkinter Canvas to teach High School Geometry
> with A LOT of success.



Can you post a link to your code.
I'd like to see what you are doing.

Thx,
Alan Isaac


 
Reply With Quote
 
 
 
 
Peter Otten
Guest
Posts: n/a
 
      05-01-2005
phil wrote:

> 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


Did you know that exceptions are ignored in the __del__() method?
One way to verify that your __del__() runs to completion would be to make
the line.count decrement the last statement, and check the total line.count
after the rotation again.
Generally speaking the __del__() method is not the most robust cleanup
mechanism. Maybe you can add a line.delete() method and change your program
flow for it to be called explicitly when the line should no longer be
visible.

Peter

 
Reply With Quote
 
pavel.kosina
Guest
Posts: n/a
 
      05-29-2005
I think the answer you should find under Subject: Tkinter slowes down


---
geon
Exception is rule.

phil napsal(a):
> 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
>
>

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Count = Count + 1 Using only std_logic_1164 Doubt efelnavarro09 VHDL 2 01-26-2011 03:49 AM
Tkinter weirdness item count phil Python 0 05-01-2005 01:26 AM
Tkinter WEIRDNESS or Python WEIRDNESS? steve Python 4 03-13-2005 12:34 AM
Count(*) in a Subquery with multiple tables: How does SQL determine which table to generate the Count() from? Kaimuri MCSD 3 12-29-2004 06:38 PM
I am adding a new row to the datagrid dynamically but if i use the Count property of Item it is not showing the count of the new rows being added Praveen Balanagendra via .NET 247 ASP .Net 2 06-06-2004 07:16 AM



Advertisments