PyQt5のQWidgetにMatplotlibのグラフを描画する

stackoverflow.com

2点コツがある

1. QWidgetのPromote

Widgetを配置し、右クリックしてPromote toを選択する。


BassClassをQWidgetにし、任意の名前をつける(この例ではMplWidget)。ヘッダファイルはmplwidgetとし、これに対応するヘッダファイルmplwidget.pyを作成してMplWidgetのクラスを定義する。

2. MplCanvasでconstrained layoutをTrueにする

これをやらないとグラフがQWidgetのサイズに収まらない

class MplCanvas(Canvas):
    def __init__(self):
        self.fig = Figure()
+        self.fig.set_constrained_layout(True)
        self.ax = self.fig.add_subplot(111)
        Canvas.__init__(self, self.fig)
        Canvas.setSizePolicy(self, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        Canvas.updateGeometry(self)