[IPython-dev] Detecting GUI mainloop running in IPython

Eric Firing efiring at hawaii.edu
Sun Jul 25 17:05:53 EDT 2010

On 07/25/2010 10:56 AM, Gael Varoquaux wrote:
> On Sun, Jul 25, 2010 at 10:35:02AM -1000, Eric Firing wrote:
>> Although ipython has provided invaluable service to mpl by enabling
>> interactive plotting for all gui backends, I am not at all sure that
>> this functionality should be left to ipython in the long run.  The
>> problem is that mpl is used in a variety of ways and environments.  Gui
>> functionality is central to mpl; it seems odd, and unnecessarily
>> complicated, to have to delegate part of that to an environment, or
>> shell, like ipython.
> Wow, I just did a little experiment, and I really don't understand the
> outcome. Please bear with me:
> $ ipython
> In [1]: !cat /home/varoquau/.matplotlib/matplotlibrc
> backend     : GtkAgg
> In [2]: from pylab import *
> In [3]: ion()
> In [4]: plot([1,2,3])
> Out[4]: [<matplotlib.lines.Line2D object at 0xccb4dac>]
> In [5]: from enthought.mayavi import mlab
> In [6]: mlab.test_surf()
> Out[6]:<enthought.mayavi.modules.surface.Surface object at 0xd58ce0c>
> Two things I do not understand:
>      1) I can interact alright with the Mayavi plot, nice and fine
>         eventhough there is not wx event-loop running, and I did not
>         register a InputHook
>      2) I did not get a segfault, while I am running at the same time GTK
>         and Wx. This used to be a big no no.
> I believe that 1 is due to matplotlib registering an InputHook, but I
> cannot find where it is done. Also, does this seems to mean that under
> Linux GTK input hooks work for Wx (and they are nicer since they don't
> poll).

No, mpl is not registering an InputHook, but pygtk is.  Maybe this is 
having a side effect because wx on linux is a wrapper around gtk.

To get a hook registered explicitly for wx, you need to use "ipython 
--gui wx"


> Anyhow, this is good news, eventhough I don't understand it at all.
> Gaël

More information about the IPython-dev mailing list