использование виджетов внутри собственного подкласса matplotlib - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь создать свой собственный подкласс Figure и поместить в него некоторый виджет, но мне интересно, почему он не работает, если я генерирую виджеты внутри метода init класса, см. Пример кода ниже. Кнопка используется для перебора некоторых данных.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec
from matplotlib.figure import Figure
from matplotlib.widgets import Button

class MyFigure(Figure):
    def __init__(self, *args, img: list,  **kwargs):
        super().__init__(*args, **kwargs)

        self.ax_img = self.add_subplot()
        self.img_list = img
        self.index = 0
        self.text = "btn was clicked"
        self.btn = None
        self.create_button()  # if only here no interaction

    def update_figure(self):
        self.ax_img.imshow(self.img_list[self.index], cmap='jet')
        # self.create_button()  # if here it works, but why?
        plt.draw()

    def create_button(self):
        ax_btn = self.add_axes([0.02, 0.28, 0.08, 0.04])
        self.btn = Button(ax_btn, 'btn')
        self.btn.on_clicked(self.on_btn_click)

    def on_btn_click(self, event):
        self.index += 1
        print(self.text, self.index)
        self.update_figure()


image = [np.random.rand(30, 30) for i in range(10)]
fig = plt.figure(FigureClass=MyFigure, img=image)
fig.update_figure()

plt.show()

только если метод вызывается в методе update_figure, он работает, в противном случае кнопка помещается и отображается, но не является интерактивной, она также не не узнаю, что завис над ним.

Я использую Python 3.7 и Matplotlib 3.2.1

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