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()