読者です 読者をやめる 読者になる 読者になる

ぱんだのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

matplotlib: FigureCanvasの継承関係

matplotlibのグラフをPyQt5などのGUIに埋め込むとき、次のように書くことが多いですよね

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
class MyMplWidget(FigureCanvas):
    def __init__(self, parent=None):
        fig = Figure()
     self.setParent(parent)
        ...

これでfigを作っていくとあら不思議、PyQtのMyMplWidgetウィジェットにグラフが現れると。 QWidgetはどこから来たのか、不思議だったのでソースの中を旅してみた

matplotlib.backends.backend_qt5agg.py
class FigureCanvasQTAgg(FigureCanvasQTAggBase,
                        FigureCanvasQT, FigureCanvasAgg):
    ...

3つのclassから継承してるみたい

matplotlib.backends.backend_qt5agg.py
class FigureCanvasQTAggBase(object):
    ...

このclassはドンづまりですな

matplotlib.backends.backend_qt5.py
class FigureCanvasQT(QtWidgets.QWidget, FigureCanvasBase):
    ...

いた!! こやつがQWidgetを継承しておりますぞ閣下!

そんな感じで継承関係を調べていくと、こうなった f:id:tarepan5884:20150906165501p:plain つまることろ、ちゃんとQWidgetを継承してますね、っていう当たり前のところでした