pyqt развернуть сетку в области прокрутки

У меня есть область сетки в области прокрутки в диалоге

class IndicSelectWindow(QDialog):
    def __init__(self, path, parent=None):
        super(IndicSelectWindow, self).__init__(parent)
        self.resize(500, 400)
        self.scroll_area = QScrollArea(self)
        self.scroll_area.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.grid_layout = QGridLayout(self.scroll_area)
        self.exec_()

Как сделать так, чтобы сетка покрывала всю область scroll_area. у него нет метода setSizePolicy. Как я могу сделать эту работу?

1 ответ

Решение

Вы должны добавить QGridLayout к QWidget, который добавлен к QScrollArea

import sys
from PyQt5 import QtWidgets


class IndicSelectWindow(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(IndicSelectWindow, self).__init__(parent=parent)
        self.resize(500, 400)
        self.layout = QtWidgets.QHBoxLayout(self)
        self.scrollArea = QtWidgets.QScrollArea(self)
        self.scrollArea.setWidgetResizable(True)
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.gridLayout = QtWidgets.QGridLayout(self.scrollAreaWidgetContents)
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.layout.addWidget(self.scrollArea)

        for i in range(100):
            for j in range(100):
                self.gridLayout.addWidget(QtWidgets.QPushButton(), i, j)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = IndicSelectWindow()
    w.show()
    sys.exit(app.exec_())

Другие вопросы по тегам