<div dir="ltr">Hi,<div><br></div><div>in IPython Notebook 1.x I built some QT matplotlib plots that allow to select a range (with the mouse) and print to the range boundaries, or related information.</div><div><br></div><div>


To do that I connect a callback to the standard matplotlib events. The callback draws a range highlight and prints the range info.</div><div><br></div><div>In IPython 2.0 I can't get the print output anymore, although the range is drawn and therefore I'm sure the callback is called. I thought that the issue can be related to:</div>


<div><br></div><div><a href="https://github.com/ipython/ipython/issues/5408" target="_blank">https://github.com/ipython/ipython/issues/5408</a><br></div><div><br></div><div>If this is the same issue, are they any workaround I can use to get the output back?</div>


<div><br></div><div>For completeness I attach the main class I use for the interactive range selection:</div><div><br></div><div><div><font face="courier new, monospace">class GuiSelection(object):</font></div><div><font face="courier new, monospace">    """Abstract class for range selection.</font></div>


<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    Methods on_press_draw(), on_motion_draw() and on_release_print() must</font></div><div><font face="courier new, monospace">    be overloaded by children classes.</font></div>


<div><font face="courier new, monospace">    """</font></div><div><font face="courier new, monospace">    def __init__(self, fig, ax, debug=False):</font></div><div><font face="courier new, monospace">        <a href="http://self.ax" target="_blank">self.ax</a> = ax</font></div>


<div><font face="courier new, monospace">        self.fig = fig</font></div><div><font face="courier new, monospace">        self.pressed = False</font></div><div><font face="courier new, monospace">        self.debug = debug</font></div>


<div><font face="courier new, monospace">        self.id_press = fig.canvas.mpl_connect('button_press_event',</font></div><div><font face="courier new, monospace">                                                self.on_press)</font></div>


<div><font face="courier new, monospace">        if self.debug:</font></div><div><font face="courier new, monospace">            print 'Figure:', fig, '\nAxis:', ax</font></div><div><font face="courier new, monospace">    def on_press(self, event):</font></div>


<div><font face="courier new, monospace">        if event.inaxes != <a href="http://self.ax" target="_blank">self.ax</a>: return</font></div><div><font face="courier new, monospace">        self.pressed = True</font></div>

<div><font face="courier new, monospace">        self.xs, self.ys = event.xdata, event.ydata</font></div>
<div><font face="courier new, monospace">        if self.debug:</font></div><div><font face="courier new, monospace">            pprint('PRESS button=%d, x=%d, y=%d, xdata=%f, ydata=%f\n' % (</font></div><div><font face="courier new, monospace">                event.button, event.x, event.y, event.xdata, event.ydata))</font></div>


<div><font face="courier new, monospace">        self.on_press_draw()</font></div><div><font face="courier new, monospace">        self.fig.canvas.draw()</font></div><div><font face="courier new, monospace">        self.id_motion = self.fig.canvas.mpl_connect('motion_notify_event',</font></div>


<div><font face="courier new, monospace">                                                     self.on_motion)</font></div><div><font face="courier new, monospace">        self.fig.canvas.mpl_connect('button_release_event',</font></div>


<div><font face="courier new, monospace">                                             self.on_release)</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    def on_motion(self, event):</font></div>


<div><font face="courier new, monospace">        if event.inaxes != <a href="http://self.ax" target="_blank">self.ax</a>: return</font></div><div><font face="courier new, monospace">        if self.debug:</font></div><div>

<font face="courier new, monospace">            pprint('MOTION x=%d, y=%d, xdata=%f, ydata=%f\n' % (</font></div>
<div><font face="courier new, monospace">                event.x, event.y, event.xdata, event.ydata))</font></div><div><font face="courier new, monospace">        self.xe, <a href="http://self.ye" target="_blank">self.ye</a> = event.xdata, event.ydata</font></div>


<div><font face="courier new, monospace">        self.on_motion_draw()</font></div><div><font face="courier new, monospace">        self.fig.canvas.draw()</font></div><div><font face="courier new, monospace"><br></font></div>


<div><font face="courier new, monospace">    def on_release(self, event):</font></div><div><font face="courier new, monospace">        if not self.pressed: return</font></div><div><font face="courier new, monospace">        self.pressed = False</font></div>


<div><font face="courier new, monospace">        if self.debug:</font></div><div><font face="courier new, monospace">            pprint('RELEASE button=%d, x=%d, y=%d, xdata=%f, ydata=%f\n' % (</font></div><div><font face="courier new, monospace">                event.button, event.x, event.y, event.xdata, event.ydata))</font></div>


<div><font face="courier new, monospace">        self.fig.canvas.mpl_disconnect(self.id_motion)</font></div><div><font face="courier new, monospace">        self.on_release_print()</font></div><div><font face="courier new, monospace"><br>


</font></div><div><font face="courier new, monospace">    def on_press_draw(self):</font></div><div><font face="courier new, monospace">        pass</font></div><div><font face="courier new, monospace"><br></font></div><div>


<font face="courier new, monospace">    def on_motion_draw(self):</font></div><div><font face="courier new, monospace">        pass</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    def on_release_print(self):</font></div>


<div><font face="courier new, monospace">        pass</font></div><div><br></div></div></div>