On 01/30/2013 05:03 PM, Benjamin Root wrote:


On Tue, Jan 29, 2013 at 5:12 PM, Mads Ipsen <mads.ip...@gmail.com <mailto:mads.ip...@gmail.com>> wrote:

    Hi,

    I spend some time writing up the question below on Stackoverflow
    which immediately was closed as a duplicate of other posts. To my
    best knowledge, these posts did not answer my questions - so I'll
    try my luck here instead:

    I am using the qt backengine for setting up a QWidget that embeds
    a matplotlib scene. When the widget is closed it appears that many
    of the matplotlib objects that were part of the plot still are
    alive in Python space.

    My question is basically the following: What actions should I take
    to clean up the figure and axes objects etc. that were part of the
    plot widget? The qt backend comes with a figure manager, but it
    appears a little unclear how it should be used.

    I have attached a small unit test example that sets up a plot.
    When the plot appears, just close it, and the test will garbage
    collects the plot, and then display info of the matplotlib objects
    that are still alive in Python space. Clearly both the path of the
    plot, and several Bbox objects are still referenced.

    Our current unit test suite contains almost 10000 GUI tests and
    its imperative that proper object space clean up is done after
    each test. Any help is much appreciated.

    Best regards,

    Mads


Would "fig.clf()" do what you need?

Ben Root

Thanks for the feedback.

The trick is to get this done automatically when the widget is closed. If you look in backend_qt4.py in the constructor of FigureCanvasQT you'll find

QtCore.QObject.connect(self, QtCore.SIGNAL('destroyed()'), self.close_event)

which should perform the steps below when close_event is called

  event = CloseEvent(s, self, guiEvent=guiEvent)
  self.callbacks.process(s, event)

If I insert print statements, the signal is ignored with matplotlib 1.1.0, but called with 1.2.0 (which uses a lambda function in the above connection).But inspecting pythons objects after the close() method is called on the widget, it seems that - at least - the paths associated with plot actually still exist.

So I'm just a bit worried if there already is existing functionality in the FigureCanvasQTAgg object that can do these things for me. And if so, how to use them?

Best regards,

Mads




--
+-----------------------------------------------------+
| Mads Ipsen                                          |
+----------------------+------------------------------+
| Gåsebæksvej 7, 4. tv |                              |
| DK-2500 Valby        | phone:          +45-29716388 |
| Denmark              | email:  mads.ip...@gmail.com |
+----------------------+------------------------------+

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to