Форум сайта python.su
Подскажите, люди добрые, чего я делаю не так. Нет прокрутки хоть убей
Задача казалось бы проста, нужно файлы из определенного каталога отобразить миниатюрами с вертикальной прокруткой, не получается.
class Screens(QDialog): show_to_all=QtCore.pyqtSignal(unicode) def __init__(self): super(Screens, self).__init__() self.X=0 self.Y=0 self.layer=QGridLayout() self.fill() self.scrollArea=QScrollArea(self) self.scrollArea.setGeometry(0,0,1000,600) self.scrollArea.setBackgroundRole(QPalette.Dark) self.viewport=QWidget() self.viewport.setGeometry(10,10,990,590) self.viewport.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.viewport.setLayout(self.layer) self.scrollArea.setWidget(self.viewport) def fill(self): self.files=os.listdir('Screens') while self.layer.count(): self.layer.takeAt(0).widget().deleteLater() for f in self.files: pixmap=QPixmap('Screens/%s' %f, 'PNG') pixmap=pixmap.scaled(195, 195 ,1) w=ScreenshotWidget(f, pixmap) w.show_to_all.connect(self.show) w.refresh.connect(self.fill) self.layer.addWidget(w, self.X, self.Y) if self.Y==3: self.Y=0 self.X+=1 else: self.Y+=1
Отредактировано FishHook (Апрель 22, 2012 07:36:53)
Офлайн
Очень срочно надо!
Офлайн
Без минимального запускаемого кода, воспроизводящего проблему сложно ответить точно. Но у меня была похожая ситуация, правда не с QGridLayout, а с VBoxLayout. Решил вроде так: у layout'а
self.propertiesLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
self.propsWidget.setMinimumHeight(1000)
voltage_widget.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys from PyQt4 import QtCore, QtGui class Screens(QtGui.QDialog): show_to_all = QtCore.pyqtSignal(unicode) def __init__(self): super(Screens, self).__init__() self.X = 0 self.Y = 0 self.layer = QtGui.QGridLayout() self.scrollArea = QtGui.QScrollArea(self) self.scrollArea.setGeometry(0, 0, 1000, 600) self.scrollArea.setBackgroundRole(QtGui.QPalette.Dark) self.viewport = QtGui.QWidget() self.viewport.setGeometry(10, 10, 990, 590) self.viewport.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.viewport.setLayout(self.layer) self.scrollArea.setWidget(self.viewport) self.viewport.setMinimumSize(1000, 600) # Вот это главное похоже self.scrollArea.setWidgetResizable(True) # добавим лэйаут, чтобы с окном вместе размер менялся layout = QtGui.QVBoxLayout() #layout.addWidget(QtGui.QPushButton('test test')) layout.addWidget(self.scrollArea) self.setLayout(layout) # заполнять наверное лучше в конце. self.fill() def fill(self): while self.layer.count(): self.layer.takeAt(0).widget().deleteLater() for i in range(15): w = QtGui.QPushButton('test %s' % i) self.layer.addWidget(w, self.X, self.Y) if self.Y == 3: self.Y = 0 self.X += 1 else: self.Y += 1 if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = Screens() window.resize(640, 500) window.show() sys.exit(app.exec_())
Отредактировано reclosedev (Апрель 22, 2012 09:08:59)
Офлайн
Спасибо, камрад!
Правда
reclosedevПришлось закамментить, как раз с ним у меня не работалоself.viewport.setMinimumSize(1000, 600) # Вот это главное похоже
Офлайн