Создание класса отображения matplotlib, переопределяющего обратные вызовы панели NavigationTool - PullRequest
0 голосов
/ 10 мая 2019

Я работаю над классом python, который создает фигуру matplotlib, и пытаюсь переопределить некоторые кнопки NavigationToolbar2 ( после этого решения SO ). Я думаю, что мой класс в порядке, однако я продолжаю получать AttributeError. Вот мой код:

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from matplotlib.backend_bases import NavigationToolbar2

class Display:

    def __init__(self):
        self.release_zoom = NavigationToolbar2.release_zoom
        self.fig = None

    def initialize(self):
        fig, axs = plt.subplots(2,1)
        NavigationToolbar2.release_zoom = self.new_release_zoom
        axs[0].plot([1,3,1])
        axs[1].plot([8,3,-4])
        self.fig = fig
        return self.fig, axs

    def new_release_zoom(self, *args, **kwargs):
        s = 'release_zoom_event'
        self.fig.canvas.callbacks.process(s, args[0])
        self.release_zoom(self, *args, **kwargs)

    def handle_release_zoom(self, evt):
        print('release_zoom_event')
        print(evt.xdata, evt.ydata)

disp = Display()
fig, axs = disp.initialize()
fig.canvas.mpl_connect('release_zoom_event', disp.handle_release_zoom)
plt.show()

Когда я использую инструмент масштабирования и увеличиваю график, печатается сообщение «release_zoom_event», однако также имеется ошибка AttributionError.

AttributeError: у объекта 'Display' нет атрибута '_ids_zoom'

Видите ли вы что-то не так с моим классом Display?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...