Pyside:QScrollArea调整小部件的大小

时间:2017-11-06 17:15:16

标签: python user-interface pyside maya qscrollarea

我遇到了QScrollArea的问题,并且调整了我的小部件的大小。我希望我的滚动区域内的所有布局和小部件都具有固定的高度。如果我设置scroll.setWidgetResizable(True),它将根据生成的小部件数量调整所有内容的大小。如果我将其设置为False,那么我的小部件将不会出现。这是我的代码示例

container = QtWidgets.QWidget()
list_layout = QtWidgets.QVBoxLayout()
container.setLayout(list_layout)
scroll = QtWidgets.QScrollArea()
scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
scroll.setWidgetResizable(True)
scroll.setWidget(container)

for x in range 10:
    product_container = QtWidgets.QFrame()
    product_container .setFixedHeight(50)
    row = QtWidgets.QHBoxLayout(product_container)
    name = QtWidgets.QLabel(y)
    cbox = QtWidgets.QCheckBox()
    row.addWidget(name)
    row.addWidget(cbox)
    seperator = QtWidgets.QFrame()
    separator.setFrameStyle(QtWidgets.QFrame.HLine | QtWidgets.QFrame.Plain)
    list_layout.addWidget(product_container)
    list_layout.addWidget(separator)

我尝试将生成的容器设置为水平布局,使其具有固定的大小(这确实有效 - 如果我设置背景颜色,则表示框在我的小部件周围较小)但是水平布局和QFrame线仍然是随机的。

我的最终目标是在水平布局和分隔符之间保持固定的距离

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

如果行具有固定高度,您需要做的就是在容器布局的末尾添加一个可扩展空间,以便所有行都向上推:

container = QtWidgets.QWidget()
list_layout = QtWidgets.QVBoxLayout()
container.setLayout(list_layout)
...
for x in range(10):
    ...
    list_layout.addWidget(separator)
list_layout.addStretch()