Migrating some code which use NavigationToolbar2QT to matplotlib 2.x AND 3.x

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Migrating some code which use NavigationToolbar2QT to matplotlib 2.x AND 3.x

PICCA Frederic-Emmanuel
Hello,

I have this code in one of  the project I neded to update.
Since we are targetting Debian buster, I need to support
matplotlib 2.X (python2) AND matplotlib 3.X  (python3)


class HiddenToolbar(NavigationToolbar2QT):
    def __init__(self, corner_callback, canvas):
        super(HiddenToolbar, self).__init__(canvas, None)
        self._corner_callback = corner_callback
        self.zoom()

    def press(self, event):
        self._corner_preclick = self._views()

    def release(self, event):
        if self._corner_preclick == self._views():
            self._corner_callback(event.xdata, event.ydata)
        self._corner_preclick = None



The problem, I have is with the  _views() method.
The 3.X version, complains that it is not available in the NavigationToolbar2QT.

so I would like to know how to rewrite this in order to be 2.X and 3.X compatible.
I tryed to find some information in the documentation about this but I did not find it.

thanks for your help.

Frederic
_______________________________________________
Matplotlib-users mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-users
Reply | Threaded
Open this post in threaded view
|

Re: Migrating some code which use NavigationToolbar2QT to matplotlib 2.x AND 3.x

tcaswell
Fedric,

Hello from NSLS-II!

`_veiws` is private so we reserve the right to change it at any time.   `.views()` was a Stack of lists of the xlim and ylim of all of the Axes in the Figure.  I suggest replacing it with something like

class HiddenToolbar(NavigationToolbar2QT):
    def __init__(self, corner_callback, canvas):
        super(HiddenToolbar, self).__init__(canvas, None)
        self._corner_callback = corner_callback
        self.zoom()
        
    def _generate_key(self):
        limits = []
        for a in self.canvas.figure.get_axes():
            limits.append([a.get_xlim(), a.get_ylim()])       
        return limits

    def press(self, event):
        self._corner_preclick = self._generate_key()

    def release(self, event):
        if self._corner_preclick == self._generate_key():
            self._corner_callback(event.xdata, event.ydata)
        self._corner_preclick = None


which only uses public APIs from upstream.

What is the purpose of this code?  It looks like this is a de-bouncer to cancel a callback if something changes the limits while the mouse is held down?

Tom

On Fri, Feb 15, 2019 at 3:52 AM PICCA Frederic-Emmanuel <[hidden email]> wrote:
Hello,

I have this code in one of  the project I neded to update.
Since we are targetting Debian buster, I need to support
matplotlib 2.X (python2) AND matplotlib 3.X  (python3)


class HiddenToolbar(NavigationToolbar2QT):
    def __init__(self, corner_callback, canvas):
        super(HiddenToolbar, self).__init__(canvas, None)
        self._corner_callback = corner_callback
        self.zoom()

    def press(self, event):
        self._corner_preclick = self._views()

    def release(self, event):
        if self._corner_preclick == self._views():
            self._corner_callback(event.xdata, event.ydata)
        self._corner_preclick = None



The problem, I have is with the  _views() method.
The 3.X version, complains that it is not available in the NavigationToolbar2QT.

so I would like to know how to rewrite this in order to be 2.X and 3.X compatible.
I tryed to find some information in the documentation about this but I did not find it.

thanks for your help.

Frederic
_______________________________________________
Matplotlib-users mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-users


--
Thomas Caswell
[hidden email]

_______________________________________________
Matplotlib-users mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-users
Reply | Threaded
Open this post in threaded view
|

Re: Migrating some code which use NavigationToolbar2QT to matplotlib 2.x AND 3.x

PICCA Frederic-Emmanuel
> Fedric,

> Hello from NSLS-II!

:))

> `_veiws` is private so we reserve the right to change it at any time.   `.views()` was a Stack of lists of the xlim and ylim of all of the Axes in the Figure.  I suggest replacing it > with something like


thanks a lot. I did not know that matplotlib guyes where working at NSLS-II.

> ...


> which only uses public APIs from upstream.

I prefer also.

> What is the purpose of this code?  It looks like this is a de-bouncer to cancel a callback if something changes the limits while the mouse is held down?

I do not know for now, but I will tell you if I discover it :).
This is some code from binoculars that I need to migrates. to matplotlib 3.X.

Cheers


Fred
_______________________________________________
Matplotlib-users mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-users