closing figure inside a callback seg faults

I want to do something like this:

  import matplotlib.pyplot as plt
  def onclick(event):
      if event.button==1:
    plt.close()
  fig = plt.gcf()
  cid = fig.canvas.mpl_connect('button_press_event', onclick)
  plt.show()

I've tried several variations on this theme, but all of them cause
crashes. Am I missing something?

I'm using 1.0.0 with WXAgg

thanks,

···

--
Paul Ivanov
314 address only used for lists, off-list direct email at:
http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7

I don't know if MPL events do anything like this, but since you are using wx, you could probably use wx.CallAfter() (or wx.CallLater(), call one of those in your callback,a nd tehn have the function called close the figure.

-Chris

···

On 10/15/10 5:16 PM, Paul Ivanov wrote:

I want to do something like this:

   import matplotlib.pyplot as plt
   def onclick(event):
       if event.button==1:
     plt.close()
   fig = plt.gcf()
   cid = fig.canvas.mpl_connect('button_press_event', onclick)
   plt.show()

I've tried several variations on this theme, but all of them cause
crashes. Am I missing something?

I'm using 1.0.0 with WXAgg

thanks,

I seem to have run into this problem with wx years ago -- destroying the widget that fed an event from a callback causes issues. As Chris suggested, the following seems to work, however:

import matplotlib.pyplot as plt
import wx

def close_figure():
     plt.close()

def onclick(event):
     if event.button==1:
         wx.CallAfter(close_figure)

fig = plt.gcf()
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()

Mike

···

On 10/15/2010 08:35 PM, Chris Barker wrote:

On 10/15/10 5:16 PM, Paul Ivanov wrote:
   

I want to do something like this:

    import matplotlib.pyplot as plt
    def onclick(event):
        if event.button==1:
      plt.close()
    fig = plt.gcf()
    cid = fig.canvas.mpl_connect('button_press_event', onclick)
    plt.show()

I've tried several variations on this theme, but all of them cause
crashes. Am I missing something?

I'm using 1.0.0 with WXAgg

thanks,

I don't know if MPL events do anything like this, but since you are
using wx, you could probably use wx.CallAfter() (or wx.CallLater(), call
one of those in your callback,a nd tehn have the function called close
the figure.

-Chris

------------------------------------------------------------------------------
Download new Adobe(R) Flash(R) Builder(TM) 4
The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly
Flex(R) Builder(TM)) enable the development of rich applications that run
across multiple browsers and platforms. Download your free trials today!
http://p.sf.net/sfu/adobe-dev2dev
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
   
--
Michael Droettboom
Science Software Branch
Space Telescope Science Institute
Baltimore, Maryland, USA