Why does PySide6.QtWidgets.QVBoxLayout not expand despite setting QSizePolicy.Expanding? Additionally, on the first click, even though the items have been added to the Legend, then items aren't visible until the mouse is clicked again. But when the 2nd click occurs, the 1st box appears but is squished with the 2nd like the image below. But after subsequent clicks, there is less squish Why does this occur? I have tried to set the Legend with resize(200,200), but increasing the size doesn't change anything. import pyqtgraph.opengl as gl from PySide6 import QtCore, QtWidgets from PySide6.QtWidgets import QApplication, QMainWindow from PySide6.QtGui import QColor, QPixmap, QPainter import sys class CustomGLViewWidget(gl.GLViewWidget): def __init__(self, legend=None, *args, **kwargs): super().__init__(*args, **kwargs) self.colours = [(0,1,1,1), (1,1,1,1), (1,0,0,1), (1,0,1,1), (1,1,0,1)] self.idx=0 self.legend = legend def mousePressEvent(self, ev): print(ev.buttons().value) if ev.buttons().value <= 2: self.legend.add_legend_item(f"{self.idx}00", self.colours[self.idx]) self.idx+=1 return super().mousePressEvent(ev) class ColorSquare(QtWidgets.QLabel): def __init__(self, color, size=50): super().__init__() self.color = color self.color_width = size self.color_height = size/2 self.setFixedSize(self.color_width, self.color_height) self.update_color() def update_color(self): pixmap = QPixmap(self.color_width, self.color_height) pixmap.fill(QtCore.Qt.transparent) painter = QPainter(pixmap) painter.setBrush(QColor.fromRgbF(*self.color)) painter.drawRect(0, 0, self.color_width, self.color_height) painter.end() self.setPixmap(pixmap) self.setStyleSheet("border: 2px solid black;") class Legend(QtWidgets.QWidget): def __init__(self, parent=None): super().__init__(parent) self.setStyleSheet("background: transparent; color: white;") self.layout = QtWidgets.QVBoxLayout(self) self.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents) self.layout.setContentsMargins(0, 0, 0, 0) self.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) self.resize(200,200) def add_legend_item(self, legend_name, colour): hbox_layout = QtWidgets.QHBoxLayout() hbox_layout.setAlignment(QtCore.Qt.AlignLeft) hbox_layout.setContentsMargins(0, 0, 0, 0) hbox_layout.setSpacing(5) square_colour = ColorSquare(colour) hbox_layout.addWidget(square_colour) square_label = QtWidgets.QLabel(legend_name) square_label.setStyleSheet("border: 1px solid white; padding: 3px; background-color: white; color: black") square_label.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) hbox_layout.addWidget(square_label) inner_widget = QtWidgets.QWidget() inner_widget.setLayout(hbox_layout) self.layout.addWidget(inner_widget) self.adjustSize() self.update() class MainWindow(QMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setGeometry(0, 0, 600, 600) self.widget_central = QtWidgets.QWidget() self.setCentralWidget(self.widget_central) self.widget_layout_v_main = QtWidgets.QVBoxLayout(self.widget_central) legend=Legend() self.widget_gl = CustomGLViewWidget(legend) legend.setParent(self.widget_gl) self.widget_layout_v_main.addWidget(self.widget_gl) if __name__ == "__main__": app = QApplication(sys.argv) mainWin = MainWindow() mainWin.show() sys.exit(app.exec()) Continue reading...