URL: https://linuxfr.org/forums/programmation-python/posts/resolu-pyqt5-probleme-de-layout Title: [résolu] PyQt5 problème de layout Authors: WrathOfThePixel Date: 2020年06月02日T18:41:00+02:00 License: CC By-SA Tags: Score: 2 **Mise à jour : QWidget.setMinimumHeight() m'avait échappé, et a résolu le problème, désolé pour le dérangement :D** Bonjour ! Je profite d'un peu de temps libre pour m'autoformer à PyQt5, et je rencontre un problème (de débutant, j'imagine, mais je ne trouve la solution nulle part). J'essaye d'insérer une QScrollArea en dessous d'un autre widget dans une layout verticale, et elle mange tout ce qui se trouve au dessus. Voici le code (à peu près) minimal qui reproduit le problème. ```python #!/usr/bin/env python3 import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import Qt class AppWindow(QWidget): def __init__(self): super().__init__() self.layout = QVBoxLayout() self.layout.addWidget(SomeButtonsWidget()) # commenter cette ligne pour voir réapparaitre les boutons self.layout.addWidget(SomeCheckBoxes()) self.setLayout(self.layout) self.setGeometry(200, 200, 210, 200) self.show() class SomeButtonsWidget(QWidget): def __init__(self): super().__init__() self.bt1 = QPushButton('bt 1', self) self.bt1.setGeometry(10, 10, 50, 30) self.bt2 = QPushButton('bt 2', self) self.bt2.setGeometry(70, 10, 50, 30) self.bt3 = QPushButton('bt 3', self) self.bt3.setGeometry(130, 10, 50, 30) class SomeCheckBoxes(QScrollArea): def __init__(self): super().__init__() self.layout = QVBoxLayout() self.widget = QWidget() self.widget.setLayout(self.layout) self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setWidgetResizable(True) self.setWidget(self.widget) self.layout.addWidget(QCheckBox('Choice 1')) self.layout.addWidget(QCheckBox('Choice 2')) self.layout.addWidget(QCheckBox('Choice 3')) if __name__ == '__main__': app = QApplication(sys.argv) window = AppWindow() sys.exit(app.exec_()) ``` J'ai donc dans ma fenêtre principale une QVBoxLayout qui contient 2 widgets, le premier est une poignée de boutons placés de manière absolue, le deuxième est une QScrollArea qui contient quelques checkbox. Le problèmes est que cette zone de scroll prend toute la place et fait disparaître mes boutons. Si je me contente de mettre mes checkbox dans le propre layout verticale, pas de problème, mais du coup on peut plus scroller, ce qui est dommage. (en remplaçant la classe SomeCheckBoxes par ce code par exemple) ```python class SomeCheckBoxes(QWidget): def __init__(self): super().__init__() self.layout = QVBoxLayout() self.setLayout(self.layout) self.layout.addWidget(QCheckBox('Choice 1')) self.layout.addWidget(QCheckBox('Choice 2')) self.layout.addWidget(QCheckBox('Choice 3')) ``` Voilà donc si quelqu'un à une idée pour m'aider, merci d'avance :)