Eric,
Not much progress, I think. Memory leaks seem endemic to the gui
backends, although Tk is by far the worst. I have been trying to
understand the gtk case in the hope of discovering some simple change in
mpl code that might eliminate the problem there and turn out to be
applicable to the other backends as well. But I have not found the
source of the problem, and it seems to occur even in a very simple test
gui script using pure pygtk, with no mpl. I need to do more testing to
find out whether the gtk problem is specific to use of gtk.Toolbar, or
whether it will occur with any nested widgets. It seems that widgets
are not getting destroyed completely; maybe there are some references
lurking somewhere in the dark. With gtk, the garbage collector does not
find any cycles that it can't deal with, but if I remember correctly
from earlier testing, this is not the case with Tk.
As a partial workaround, if you don't need the toolbar, try setting
rcParams['toolbar'] = None
This may make the leak much smaller. I think the toolbar causes
problems in all guis simply because it increases the complexity and
number of widgets being tracked, if for no other reason.
I would be delighted if a gui guru would emerge with a thorough
explanation and solution for the memory leaks occurring with repeated
opening and closing of windows.
Eric
Pellegrini Eric wrote:
> Hi evebrybody,
>
> I started a discussion one week ago about a problem of memory leak using
> the following code:
>
> ********************************************************************************
> from Tkinter import *
> from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
> import pylab
>
> def display():
> mat = pylab.zeros((100,100))
> pylab.ioff()
> image = pylab.matshow(mat)
> pylab.ion()
> pylab.close()
> can = FigureCanvasTkAgg(image, master=frame)
> can.show()
> can.get_tk_widget().grid(row = 0,column = 0)
>
> root = Tk()
> frame = Frame(root)
> frame.grid(row = 0,column = 0)
> canvas = Canvas(frame, width = 240, height = 240, relief = "sunken", bg
> = "white")
> canvas.grid()
> button = Button(root,text="DisplayMatrix",command = display)
> button.grid(row = 1,column = 0)
> *******************************************************************************
>
> up to now, I have not found any way to solve it and unfortunately the
> proposed hints did not solve the problem (gc_collect(), clf(), cla()).
> Is there something new about this ?
>
> thanks
>
> Eric
>
> ------------------------------------------------------------------------
> Découvrez une nouvelle façon d'obtenir des réponses à toutes vos
> questions ! Profitez des connaissances, des opinions et des expériences
> des internautes sur Yahoo! Questions/Réponses
> <http://fr.rd.yahoo.com/evt=42054/*http://fr.answers.yahoo.com>.
>
>
> ------------------------------------------------------------------------
>
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys-and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Matplotlib-users mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
|