QBoxLayout растягивает свои виджеты при изменении размера, содержащего ScrollArea, вместо прокрутки - PullRequest
2 голосов
/ 04 июля 2011

У меня есть 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 Ответ

6 голосов
/ 04 июля 2011

Создайте отдельный виджет в качестве контейнера меток (ниже как «labelContainer») и установите его в качестве виджета области прокрутки. Создайте макет вертикальной рамки для виджета контейнера (ниже под названием «labelLayout») и добавьте метки к этому макету.

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_()
...