QBoxLayout在调整包含ScrollArea的大小时展开其小部件,而不是滚动

时间:2011-07-04 00:04:07

标签: qt pyqt qscrollarea

我有一个ScrollArea,包含一个包含多个标签的VBoxLayout:

realmScroll = QScrollArea(self.container.widget())
realmScroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
realmScroll.setWidgetResizable(True) # setting this to False has no effect

self.realmLayout = QVBoxLayout(realmScroll)
realmScroll.setWidget(self.realmLayout.widget())
self.container.addWidget(realmScroll)

for i in range(1, 20):
    label = QLabel("test #" + str(i))
    label.setMinimumHeight(20)
    self.realmLayout.addWidget(label)

然而,当查看布局不滚动时,它会将项目垂直拉伸(收缩?):

QLabels all bunched up on each other

我尝试过使用最低高度,但这似乎不起作用 - 我可以做些什么来使每个标签单独出现并导致滚动视图滚动?

1 个答案:

答案 0 :(得分:6)

创建一个单独的小部件作为标签的容器(下面作为“labelsContainer”)并将其设置为滚动区域的小部件。为容器小部件创建一个垂直框布局(下面为“labelsLayout”)并将标签添加到该布局。

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Test(QMainWindow):

    def __init__(self):
        QMainWindow.__init__(self)
        self.realmScroll = QScrollArea(self)
        self.setCentralWidget(self.realmScroll)
        self.realmScroll.setWidgetResizable(True)

        labelsContainer = QWidget()
        self.realmScroll.setWidget(labelsContainer)
        labelsLayout = QVBoxLayout(labelsContainer)

        for i in range(1, 20):
            label = QLabel("test #" + str(i))
            labelsLayout.addWidget(label)

app = QApplication(sys.argv)
test = Test()
test.show()
app.exec_()