Как заставить QScrollArea работать правильно? - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь добавить несколько меток в Qscrollarea, но он не работает должным образом. Я добавил Qwidget в область прокрутки и добавил метки в Qwidget. Я добавил self.scrollArea.setWidgetResizable(True) Все еще не работает.

Это (часть) файла, который я создал с помощью Qtdesigner:

self.scrollArea = QtWidgets.QScrollArea(self.gridLayoutWidget)
self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 457, 428))
self.scrollAreaWidgetContents.setMinimumSize(QtCore.QSize(0, 0))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.gridLayoutWidget_2 = QtWidgets.QWidget(self.scrollAreaWidgetContents)
self.gridLayoutWidget_2.setGeometry(QtCore.QRect(0, 0, 441, 431))
self.gridLayoutWidget_2.setObjectName("gridLayoutWidget_2")
self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget_2)
self.gridLayout_2.setSizeConstraint(QtWidgets.QLayout.SetMinAndMaxSize)
self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
self.gridLayout_2.setObjectName("gridLayout_2")
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.gridLayout.addWidget(self.scrollArea, 1, 0, 1, 4)

И я использовал другой файл для запуска программы:

for i in range(50) :
            self.ResultLabel = QtWidgets.QLabel(self.gridLayoutWidget)
            self.ResultLabel.setMinimumSize(QtCore.QSize(200, 30))
            self.ResultLabel.setWordWrap(True)
            self.ResultLabel.setFont(QtGui.QFont('Segoe UI',9))
            self.ResultLabel.setText(str(i))
            self.gridLayout_2.addWidget(self.ResultLabel, i, 0, 1, 2)

Это что я получаю:

enter image description here

1 Ответ

0 голосов
/ 14 апреля 2020

Если вам нужна пустая область прокрутки, которая будет заполнена кодом, вам не нужно добавлять в нее другой виджет из Designer, потому что он уже существует, и это scrollAreaWidgetContents.

, так как этот виджет содержимого не имеет макета, установленного при создании области прокрутки, вы должны установить его самостоятельно. Вы можете сделать это вручную из кода:

    self.contentsLayout = QtWidgets.QGridLayout(self.scrollAreaWidgetContents)

. В приведенном выше случае удалите gridLayoutWidget_2 из конструктора, так как в этом нет необходимости.

В качестве альтернативы, вы также можете сделать то же самое из Designer. с небольшим обходным путем:

  • добавить любой виджет (кнопка, метка, это не имеет значения) в виджет scrollAreaWidgetContents; на самом деле у вас уже есть такой виджет (gridLayoutWidget_2, который вы создали внутри него), так что вы можете использовать его для этой цели;
  • щелкните правой кнопкой мыши область прокрутки и выберите компоновку сетки из подпункта «Макет» menu;
  • удалить виджет, добавленный ранее (или gridLayoutWidget_2 в вашем случае);

Это необходимо, потому что Designer не позволяет устанавливать макет для виджета до у него есть хотя бы один дочерний виджет.

...