On Wed, Jun 27, 2007 at 09:16:09AM -0500, John Hunter wrote: > On 6/26/07, Brian T.N. Gunney <[EMAIL PROTECTED]> wrote: > >I have a matplotlib script that generates several figures. > >When a figure receives an event, how do I know which figure > >it did it? For example, the key event 'w' is meant to close > >the figure, but so far, I have no way to control which figure > >gets closed. > > All events are connected to figures by definition -- the figure is > placed inside a GUI canvas and that is what manages the events. The > pylab connect function is just a thing wrapper to the canvas > mpl_connection function. pylab's connect just grabs the current > figure with "gcf" and makes the call fig.canvas.mpl_connect > > So in matplotlib, events do not make since w/o reference to specific > figures.
That makes sense. However, it's not clear to me which figure is to be the "current" figure. It does not appear to be the figure where the event occured. > > > >In the pick_event_demo.py example, each figure is connected > >to an event handler specific to it. I think this wouldn't > >work in my case because I don't know how many figures I'd > >have until I process some data. > > I don't see why this is a problem -- just set up the connections when It's a problem because the number of figures is variable. I don't know how many call-back functions to define when I write the script. > you create the figure as you process the data. You'll probably need > to post an example if you have further troubles, because it is hard to > advise in the abstract. Ok. Here is an example. Run this and type 'w' in window 0. You should expect figure 0 to be closed, but instead, figure 2 is closed. #!/usr/bin/env python import sys from pylab import * # This is meant to illustrate that the number of figures is # unknown until run time. if len(sys.argv) > 1: nfigs = int(sys.argv[1]) else: nfigs = 3 # Process key presses. def on_key(event): if event.key=='w': # Close current window. # How do we control which window gets closed? close() elif event.key=='q': # Exit. sys.exit(0) # Generate as many figures as specified on command line. for i in range(nfigs): figure(i) title( str(i) ) plot(range(i+2)) connect('key_press_event', on_key) show() Thanks for helping. Brian ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users