pylab and gtk : the main windows close !

   Yes I understand the solution I try it, it work but the

    > problem comes with when I try text() function of pylab
    > that does'nt exist in matplotlib. I think it's to much

With very few exceptions, all pylab functions are thin wrappers around
matplotlib functions. Eg, take a look at the text function in
matplotlib/pylab.py

def text(*args, **kwargs):
    ret = gca().text(*args, **kwargs)
    draw_if_interactive()
    return ret

Since gca() is returning the current axes, you can see that "text" is
actually an Axes method -
http://matplotlib.sourceforge.net/matplotlib.axes.html#Axes-text .

    > work for me to rewrite functions that are in pylab and not
    > in matplotlib. I am a newbie and I don't care to not
    > write programs in pure pytonic style. from pylab import *
    > is good for me.

If you want to use pylab to manage your figure windows, but modify the
GUI somewhat, you can do this by accessing the figure manager
widgets. Specifically, the manager has attributes

  manager.window : the gtk window
  manager.vbox : a gtk.VBox, holds the canvas and toolbar
  manager.canvas : the figure canvas, a gtk.DrawingArea
  manager.toolbar : holds the gtk.Toolbar

Below is an example.

Have fun!
JDH

"""
An example of how to use pylab to manage your figure windows, but
modify the GUI by accessing the underlying gtk widgets
"""
import matplotlib
matplotlib.use('GTKAgg')
from pylab import get_current_fig_manager, subplot, plot, legend, connect, show

ax = subplot(111)
plot([1,2,3], 'ro-', label='easy as 1 2 3')
plot([1,4,9], 'gs--', label='easy as 1 2 3 squared')
legend()

manager = get_current_fig_manager()
# you can also access the window or vbox attributes this way
toolbar = manager.toolbar

# now let's add a button to the toolbar
import gtk
next = 8; #where to insert this in the mpl toolbar
button = gtk.Button('Click me')
button.show()

def clicked(button):
    print 'hi mom'
button.connect('clicked', clicked)

toolitem = gtk.ToolItem()
toolitem.show()
toolitem.set_tooltip(
    toolbar.tooltips,
    'Click me for fun and profit')

toolitem.add(button)
toolbar.insert(toolitem, next); next +=1

# now let's add a widget to the vbox
label = gtk.Label()
label.set_markup('Drag mouse over axes for position')
label.show()
vbox = manager.vbox
vbox.pack_start(label, False, False)
vbox.reorder_child(manager.toolbar, -1)

def update(event):
    if event.xdata is None:
        label.set_markup('Drag mouse over axes for position')
    else:
        label.set_markup('<span color="#ef0000">x,y=(%f, %f)</span>'%(event.xdata, event.ydata))

connect('motion_notify_event', update)

show()