QBoxLayout растягивает свои виджеты при изменении размера, содержащего ScrollArea, вместо прокрутки
У меня есть 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)
Однако при просмотре макет не прокручивается, он растягивает (сжимает?) Элементы по вертикали:
Я пытался использовать минимальную высоту, но это, похоже, не работает - что я могу сделать, чтобы каждый ярлык отображался отдельно и заставлял прокручиваться представление прокрутки?
1 ответ
Решение
Создайте отдельный виджет в качестве контейнера меток (ниже как "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_()