Привет мастерам Qt!
Мучаю Qt из-под Питона, наткнулся на непонятную бяку. Сделал такой вот бутерброд: в окно класса QWidget загнал QScrollArea, в неё QGridLayout, а в него уже в цикле кидаю QLabel. Смысл сего действа - вывести картинки стройными рядами, как иконки в проводнике. И при ресайзе окна приложения количество колонок должно автоматом меняться, при уменьшении ширины должна вырастать высота зоны прокрутки, при увеличении - сжиматься. Откройте проводник, там всё очевидно.
self.mainLayout = QGridLayout()
self.mainLayout.setSpacing(self.picSpacing)
self.mainLayout.setSizeConstraint(QLayout.SetFixedSize)
self.viewport = QWidget()
self.viewport.setLayout(self.mainLayout)
self.scrollArea = QScrollArea()
self.scrollArea.setBackgroundRole(QPalette.Dark)
self.scrollArea.setWidget(self.viewport)
self.scrollArea.setWidgetResizable(True)
layout = QVBoxLayout()
layout.addWidget(self.scrollArea)
self.setLayout(layout)
... Тут цикл по картинкам накидывает кучу Qlabel рядами
self.pixmapLabels.append(self.createPixmapLabel(k))
self.mainLayout.addWidget(self.pixmapLabels[k], k // self.curColumns, k % self.curColumns)
В общем всё вроде получается, ресайз красиво отрабатывает, ряды картинок я перестраиваю. Но есть одно НО, и заключается оно в параметре грида SizeConstraint. Он определяет поведение виджетов на QGridLayout при ресайзе. Если я его отключаю - картинки наезжают на верхние ряды, выравнивать их приходится через setSpacing нереальными значениями (вместо 10 приходится ставить (10 + высота картинки). Это бред, фиг просчитаешь высоту зоны прокрутки. Если ставлю фиксированный SizeConstraint - перестройка грида отлично отрабатывает, картинки строго по сетке, шик. Но если уменьшить ширину окна, чтобы они выстроились в один-два ряда - зона прокрутки становится узкой и высокой. А потом обратно расширяешь окно - грид перестраивается, но высота зоны прокрутки не уменьшается. Вверху висят картинки, а внизу - пустое место, которого быть не должно.
Грид я перестраиваю повторным вызовом addWidget для каждого QLabel с новыми координатами.
Есть у кого-то мысли, как победить этот глюк? Или я что-то делаю не так? Я новичок и в Питоне, и в Qt, не пинайте сильно.