Найти - Пользователи
Полная версия: [Qt4] QGridLayout + QScrollArea
Начало » GUI » [Qt4] QGridLayout + QScrollArea
1
FishHook
Подскажите, люди добрые, чего я делаю не так. Нет прокрутки хоть убей
Задача казалось бы проста, нужно файлы из определенного каталога отобразить миниатюрами с вертикальной прокруткой, не получается.
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
Очень срочно надо!
reclosedev
Без минимального запускаемого кода, воспроизводящего проблему сложно ответить точно. Но у меня была похожая ситуация, правда не с QGridLayout, а с VBoxLayout. Решил вроде так: у layout'а
self.propertiesLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
у виджета
self.propsWidget.setMinimumHeight(1000)
у динамически добавляемых виджетов
voltage_widget.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)

Т.е. там по моему нужно чтобы виджеты всю свободную область не занимали и у них были ограничения по размеру.
———————————–
Добавлено

Самому стало интересно
Вот работающий код с QGridLayout:
#!/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_())

FishHook
Спасибо, камрад!
Правда
reclosedev
self.viewport.setMinimumSize(1000, 600) # Вот это главное похоже
Пришлось закамментить, как раз с ним у меня не работало
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB