Hello everyone, in my programs I need the RectangleSelector. It's quiet easy to use but I discovered that there isn't a really easy way to switch it off once it is activated. I thought about the following lines to matplotlib/widgets.py:
#-------------------------------------------------------------------------------------------- #at the beginning of RectangleSelector's __init__: ... docstring ... self.ax = ax # like before self.visible = True # like before self.canvas = ax.figure.canvas # like before self.connect_id = [] # will contain the connection id's self.active = True # for activation / deactivation self.is_active(True) ... snip ... #and an additional method: #-------------------------------------------------------------------------------------------- def is_active(self, active): """ Use this to activate the RectangleSelector from your program. """ self.active = active if active and len(self.connect_id) == 0: # you want to activate and it # isn't already active self.connect_id.append(self.canvas.mpl_connect( 'motion_notify_event', self.onmove)) self.connect_id.append(self.canvas.mpl_connect( 'button_press_event', self.press)) self.connect_id.append(self.canvas.mpl_connect( 'button_release_event', self.release)) self.connect_id.append(self.canvas.mpl_connect( 'draw_event', self.update_background)) if not active and len(self.connect_id) != 0: # you want to deactivate for index in self.connect_id: # and it isn't already inactive self.canvas.mpl_disconnect(index) self.connect_id = [] #-------------------------------------------------------------------------------------------- With these changes you can check the following example: #-------------------------------------------------------------------------------------------- from matplotlib.widgets import RectangleSelector from pylab import * def onselect(eclick, erelease): 'eclick and erelease are matplotlib events at press and release' print 'startposition : (%f,%f)'%(eclick.xdata, eclick.ydata) print 'endposition : (%f,%f)'%(erelease.xdata, erelease.ydata) print 'used button : ', eclick.button def toggle_Selector(event): print "Key pressed." if event.key in ["Q", "q"] and toggle_Selector.RS.active: print " RectangleSelector deactivated." toggle_Selector.RS.is_active(False) if event.key in ["A", "a"] and not toggle_Selector.RS.active: print " RectangleSelector activated." toggle_Selector.RS.is_active(True) x = arange(100)/(99.0) y = sin(x) fig = figure ax = subplot(111) ax.plot(x,y) toggle_Selector.RS = RectangleSelector(ax, onselect,drawtype='box') connect("key_press_event", toggle_Selector) show() #-------------------------------------------------------------------------------------------- I hope this is usefull to someone, Martin PS: Maybe the above example can replace the RectangleSelector's docstring. I think it's easier to read and understand. ------------------------------------------------------------------------- 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-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel