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() -- http://mail.python.org/mailman/listinfo/python-list