Hi Vicent,

On Thursday 03 September 2009 18:14:37 Vicent Mas wrote:
> Hi Matthias,
>
> 2009/9/3 Matthias Michler <matthiasmich...@gmx.net>:
> > Hi Vicent,
> >
> > I think the following example may help you, althogh their might be a
> > better way:
>
> thanks for your answer. It really helps. I didn't know about the mode
> attribute of navigation toolbars. Inspecting the
> NavigationToolbar2QTAgg class interactively with an IPython shell
> doesn't show such attribute for this class. Maybe it is created
> dynamically when the pan/zoom button is clicked?

I think: The attribute 'mode' is added during the initialisation of the 
toolbar (actually it is set during the initalisation of 
backend_qt.NavigationToolbar2QT and therefore you can see it directly as 
attribute of the abstract class NavigationToolbar2QTAgg, which inherits from 
backend_qt.NavigationToolbar2QT).

Therefore the following works:
import matplotlib
matplotlib.use("QTAgg")
import matplotlib.pyplot as plt

print "initialised toolbar : ", plt.get_current_fig_manager().toolbar
print " >%s<" % (plt.get_current_fig_manager().toolbar.mode)

> Now I still have to find out how to distinguish axes pan from axes
> zoom cases. I suppose I can use 'button_press_event' canvas events and
> use the button attribute of these events for knowing if the user is
> doing a pan or a zoom: pan/zoom mode + left button --> user is panning
> axes, pan/zoom mode + right button --> user is zooming axes. Right?


I send you again my previous example with some additional lines. In my opinion 
you can use either  'button_press_event' or axes-callbacks to achieve what 
you want, but maybe I'm missing something.

regards Matthias


import matplotlib.pyplot as plt

def callback(ax):
    """ prints mode of toolbar after limits changed

          e.g.
           mode : >zoom rect<
           mode : >pan/zoom<
    """
    print " mode : >%s<" % (plt.get_current_fig_manager().toolbar.mode)

    if plt.get_current_fig_manager().toolbar.mode == 'zoom rect':
        print "We are in zoom with Rectangle - mode"
    elif plt.get_current_fig_manager().toolbar.mode == 'pan/zoom':
        print "We are in pan/zoom - mode"
 
def fct(event):
    """ print zoom-mode after  'button_press_event'  """
    if plt.get_current_fig_manager().toolbar.mode == 'zoom rect':
        print "We are in zoom with Rectangle - mode"
    elif plt.get_current_fig_manager().toolbar.mode == 'pan/zoom':
        print "We are in pan/zoom - mode"
    

ax = plt.gca()
##ax.callbacks.connect('xlim_changed', callback)
##ax.callbacks.connect('ylim_changed', callback)

plt.connect("button_press_event", fct)
plt.show()



------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to