Mar-30-2022, 09:19 PM
You can add an empty widget with fixed height
import sys import matplotlib matplotlib.use("Qt5Agg") from PyQt5 import QtCore from PyQt5.QtWidgets import (QApplication, QMainWindow, QSizePolicy, QLabel, QVBoxLayout, QHBoxLayout, QWidget, QPushButton) from numpy import arange, sin, pi from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure class MyMplCanvas(FigureCanvas): def __init__(self, parent=None, width=5, height=4, dpi=100): fig = Figure(figsize=(width, height), dpi=dpi) self.axes = fig.add_subplot(111) self.compute_initial_figure() FigureCanvas.__init__(self, fig) self.setParent(parent) FigureCanvas.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding) FigureCanvas.updateGeometry(self) def compute_initial_figure(self): pass class MyStaticMplCanvas(MyMplCanvas): def compute_initial_figure(self): t = arange(0.0, 3.0, 0.01) s = sin(2*pi*t) self.axes.plot(t, s) class ApplicationWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.setWindowTitle("Window") sc = MyStaticMplCanvas(self, width=5, height=4, dpi=100) vbox = QVBoxLayout() box_layout = QWidget() buttonbox = QHBoxLayout() btn = QPushButton("Button 1") btn.clicked.connect(self.btn_1_clicked) buttonbox.addWidget(btn) btn2 = QPushButton("Button 2") buttonbox.addWidget(btn2) btn3 = QPushButton("Button 3") buttonbox.addWidget(btn3) vbox.addLayout(buttonbox) box_layout.setLayout(vbox) label = QLabel("Some Text ...") vbox.addWidget(label) # 100px space space = QWidget() space.setFixedHeight(100) vbox.addWidget(space) vbox.addWidget(sc) self.setCentralWidget(box_layout) self.setGeometry(50, 50, 800, 600) def btn_1_clicked(self): print(f"Button 1 clicked") if __name__ == '__main__': app = QApplication(sys.argv) aw = ApplicationWindow() aw.setWindowTitle("PyQt5 Matplot Example") aw.show() app.exec()