Я работаю над классом 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?