Как сделать QVBoxLayout прокручиваемым с помощью QScrollArea (PyQt) - PullRequest
0 голосов
/ 02 апреля 2020

Я использую PySide2 для создания интерфейса Qt. Мой интерфейс в основном содержится в QVBoxLayout, к которому я динамически добавляю или удаляю элементы. Поскольку высота этого макета изменяется и иногда может превышать фактическую высоту экрана, я хотел добавить к нему прокрутку, но пока не получилось. Вот мой код:

#Here i attach a master layout parented to my window
masterlayout = QtWidgets.QVBoxLayout(self)

#To this master layout i attach a scroll widget
scrollWidget = QtWidgets.QScrollArea()
masterlayout.addWidget(scrollWidget)

#The main layout is what will contain ALL of my UI
mainLayout = QtWidgets.QVBoxLayout(self)
mainLayout.setContentsMargins(0,0,0,0)
mainLayout.setAlignment(QtCore.Qt.AlignTop)
#And i attach it to the scrollWidget
scrollWidget.setLayout(mainLayout)

Это не работает, и у меня осталось окно, я не могу изменить размер достаточно мал, чтобы scrollArea был полезным. Заранее спасибо, что указали мне на то, что может быть не так с этим:)

EDIT1: Согласно Документация Qt , область прокрутки должна содержать виджет, а не макет, так что я ' мы попытались создать фиктивный виджет, который будет содержать mainLayout, который я являюсь родителем scrollArea, но из-за этого исчезли только все элементы моего mainLayout:

#Create master layout parented to the window
masterlayout = QtWidgets.QVBoxLayout(self)

#Create scroll widget parented to master layout
scrollWidget = QtWidgets.QScrollArea()
masterlayout.addWidget(scrollWidget)

#Create a dummy widget parented to the scroll widget
dummyWidget = QtWidgets.QWidget()
scrollWidget.setWidget(dummyWidget)

#Create a main layout parented to the dummy widget
mainLayout = QtWidgets.QVBoxLayout(self)
mainLayout.setContentsMargins(0,0,0,0)
mainLayout.setAlignment(QtCore.Qt.AlignTop)
dummyWidget.setLayout(mainLayout)
...