2017-01-12 8 views
1

У меня есть область сетки в области прокрутки в диалоговом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_()) 

enter image description here