Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Memory Leak with Tkinter Canvas (Python 2.5 Win32)

Reply
Thread Tools

Memory Leak with Tkinter Canvas (Python 2.5 Win32)

 
 
frikk
Guest
Posts: n/a
 
      08-02-2007
Hey everyone. I have been working with python for a couple years now,
but just recently built my first program with a GUI. I decided to
start with Tkinter since it is included with the base package,
although wxWindows will likely be my next choice. Tkinter seems to be
pretty slow for my needs.

Anyway - I am building a genetic algorithm simulator. I have a grid
where an Ant moves around. It is infeasible for me to update the grid
every simulation step - so I just do it at the end. But what I've
realized is that my program performs worse and worse when I update the
grid. Turns out there is a memory leak somewhere and I don't think it
is in my code. The memory leak occurs only when I write (via
create_rectangle) to the canvas widget. I wrote the following small
script to demonstrate this problem (see below). Every time the button
is pressed, _1040KB_ is added to the RAM of wpython.exe. This adds up
FAST. I have not verified this on my OS X box.

As you can see- I am doing nothing other than drawing a lot of
rectangles on the canvas. I have two questions.

1. Is this a bug in my usage of Tkinter? Am I somehow leaving
objects laying around that aren't being deleted? Is create_rectangle
not the appropriate function to use?)
2. Is there a better, quicker way to update a "grid"-like object?

Thanks,
Blaine

Current System:
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit
(Intel)] on win32
Windows XP SP2 - all recent patches and updates

Script:

from Tkinter import *

canv = None
HEIGHT=600
WIDTH=600
def clear_grid():
for i in range(0,HEIGHT/10):
for j in range(0, HEIGHT/10):
canv.create_rectangle(i*10,j*10, \
i*10+10, j*10+10, \
fill = "white")

def draw_window(master):
global canv
frame = Frame(master)

btn_grid = Button(frame, text="draw grid", command=clear_grid)
btn_grid.pack(side=TOP)

canv = Canvas(frame, height=HEIGHT, width=WIDTH, bg='white')
canv.pack()
frame.pack()

root = Tk()
draw_window(root)
mainloop()

 
Reply With Quote
 
 
 
 
Wojciech =?iso-8859-2?Q?Mu=B3a?=
Guest
Posts: n/a
 
      08-02-2007
frikk wrote:
> [...]
> As you can see- I am doing nothing other than drawing a lot of
> rectangles on the canvas.


You aren't drawing, but **creating** rectangle objects, as
a meth. name suggests. You find more info at tkinter.effbot.org.

> [...]
>
> def clear_grid():


canv.delete(ALL)

> for i in range(0,HEIGHT/10):
> for j in range(0, HEIGHT/10):
> canv.create_rectangle(i*10,j*10, \
> i*10+10, j*10+10, \
> fill = "white")


w.
 
Reply With Quote
 
 
 
 
Hendrik van Rooyen
Guest
Posts: n/a
 
      08-03-2007

"frikk" <fr...l.com> wrote:

> 1. ....... Am I somehow leaving
> objects laying around that aren't being deleted? Is create_rectangle
> not the appropriate function to use?)


Try calling the canvas's delete method with the old rectangle before
making a new one.

- Hendrik

 
Reply With Quote
 
frikk
Guest
Posts: n/a
 
      08-03-2007
On Aug 3, 2:26 am, "Hendrik van Rooyen" <(E-Mail Removed)> wrote:
> "frikk" <fr...l.com> wrote:
> > 1. ....... Am I somehow leaving
> > objects laying around that aren't being deleted? Is create_rectangle
> > not the appropriate function to use?)

>
> Try calling the canvas's delete method with the old rectangle before
> making a new one.
>
> - Hendrik


Hey guys-

Both of your suggestions were perfect - I was just unaware I was
actually creating new *object* instead of drawing on the canvas. noob
mistake. Thanks again!

-Blaine

 
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
how to couper contenier of a canvas in an outer canvas??? olsr.kamal@gmail.com Python 10 03-15-2013 08:46 PM
Canvas with scrollbars - how to get correct canvas coordinate when the scroll bars have moved? PhilC Python 2 10-25-2004 11:57 AM
Canvas scrolling - scrollBar become "disabled" on change in canvas Askari Python 2 08-30-2004 02:56 PM
Memory leak in Tkinter????? Elbert Lev Python 2 07-25-2004 08:38 PM
Memory leak with after_cancel() in Tkinter Ton K. Python 0 07-25-2003 03:19 PM



Advertisments