Hello, What follows is the lasso example code that I am running. This is the example the comes with the matplotlib examples code. It works fine except when one clicks and does not move the mouse. It seems to hang. I have traced it down to the self.canvas.widgetlock.locked() call within the LassoManager method called onpress. The onpress method is registered as a callback for a button press event. What I need to know is how to determine which widget has the lock and how to release the lock before returning from the callback so that everything will continue to work.
If anyone knows how to fix this please send example code. Thanks, Len #!/usr/local/bin/python """ Simple hacked test case to add fake runs and print out selected point set. Show how to use a lasso to select a set of points and get the indices of the selected points. A callback is used to change the color of the selected points This is currently a proof-of-concept implementation (though it is usable as is). There will be some refinement of the API and the inside polygon detection routine. """ from matplotlib import widgets import matplotlib.mlab from matplotlib import nxutils from matplotlib import colors from matplotlib import collections from matplotlib import pyplot import numpy from numpy.random import rand class Datum: colorin = colors.colorConverter.to_rgba('red') colorout = colors.colorConverter.to_rgba('green') def __init__(self, x, y, run=None, include=False): self.x = x self.y = y self.run = run if include: self.color = self.colorin else: self.color = self.colorout class LassoManager: def __init__(self, ax, data): self.axes = ax self.canvas = ax.figure.canvas self.data = data self.Nxy = len(data) self.facecolors = [d.color for d in data] self.xys = [(d.x, d.y) for d in data] self.facecolors[50] = (0.0,0.0,0.0,1.0) self.collection = collections.RegularPolyCollection( fig.dpi, 6, sizes=(100,), facecolors=self.facecolors, offsets = self.xys, transOffset = ax.transData) ax.add_collection(self.collection) self.cid = self.canvas.mpl_connect('button_press_event', self.onpress) def callback(self, verts): ind = numpy.nonzero(nxutils.points_inside_poly(self.xys, verts))[0] print "New selection:" for i in range(self.Nxy): if i in ind: self.facecolors[i] = Datum.colorin print "Index=%d, run=%d, xy = (%f,%f)" % (i,self.data[i].run,self.data[i].x,self.data[i].y) else: self.facecolors[i] = Datum.colorout self.canvas.draw_idle() self.canvas.widgetlock.release(self.lasso) del self.lasso def onpress(self, event): print "OK1" print self.canvas.widgetlock.locked() if self.canvas.widgetlock.locked(): return print "OK2" if event.inaxes is None: return print "OK3" self.lasso = widgets.Lasso(event.inaxes, (event.xdata, event.ydata), self.callback) # acquire a lock on the widget drawing self.canvas.widgetlock(self.lasso) print "OK4" data = [Datum(*xy) for xy in rand(100, 2)] # Fake run data i = 0 for d in data: d.run = i i += 1 fig = pyplot.figure() ax = fig.add_subplot(111, xlim=(0,1), ylim=(0,1), autoscale_on=False) lman = LassoManager(ax, data) pyplot.show() -- __________________________________________________ Leonard J. Reder Jet Propulsion Laboratory Email: [EMAIL PROTECTED] Phone (Voice): 818-354-3639 -------------------------------------------------- ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users