PyQt QScrollArea не прокручивается - PullRequest
1 голос
/ 22 июля 2011

Я хочу поместить некоторые элементы моего пользовательского интерфейса в область прокрутки, так как их может быть много.Я попробовал следующий фрагмент кода, но область просто растет, когда я добавляю в него больше элементов.

В первой части я настроил область прокрутки, виджет и макет.Я применяю макет к виджету и устанавливаю виджет на прокрутку.Затем я заполняю свой макет во внешней функции.Кнопка под всем этим позволяет заполнить больше элементов в макете.

    scrollRow = QtGui.QScrollArea()
    scrollRow.setMaximumSize(600, 400)
    self.rowAssetWidget = QtGui.QWidget()
    self.rowAssetLayout = QtGui.QGridLayout()
    self.rowAssetLayout.setSpacing(20)
    self.rowAssetWidget.setLayout(self.rowAssetLayout)
    scrollRow.setWidget(self.rowAssetWidget)
    #self.mainLayout.addLayout(self.rowAssetLayout, 2, 0)
    self.mainLayout.addWidget(self.rowAssetWidget, 2, 0)
    self.assetRow()

    self.addAssetRowBtn = QtGui.QPushButton("+")
    self.addAssetRowBtn.setFixedSize(20, 20)
    self.mainLayout.addWidget(self.addAssetRowBtn, 3, 0)
    self.connect(self.addAssetRowBtn, QtCore.SIGNAL("clicked()"), self.addAssetRow)

Мои элементы выглядят хорошо, но это не прокрутка.Есть идеи?

1 Ответ

6 голосов
/ 25 июня 2012
import sys
from PyQt4 import QtGui,QtCore
class LayoutTest(QtGui.QWidget):
    def __init__(self):
        super(LayoutTest, self).__init__()
        self.horizontalLayout = QtGui.QVBoxLayout(self)
        self.scrollArea = QtGui.QScrollArea(self)
        self.scrollArea.setWidgetResizable(True)
        self.scrollAreaWidgetContents = QtGui.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 380, 280))
        self.horizontalLayout_2 = QtGui.QHBoxLayout(self.scrollAreaWidgetContents)
        self.gridLayout = QtGui.QGridLayout()
        self.horizontalLayout_2.addLayout(self.gridLayout)
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.add_button = QtGui.QPushButton("Add Items")
        self.horizontalLayout.addWidget(self.scrollArea)
        self.horizontalLayout.addWidget(self.add_button)
        self.connect(self.add_button, QtCore.SIGNAL("clicked()"), self.addButtons)
        self.setGeometry(300, 200, 400, 300)

    def addButtons(self):
        for i in range(0, 50):
            self.r_button = QtGui.QPushButton("Button %s " % i)
            self.gridLayout.addWidget(self.r_button)
def run():

    app = QtGui.QApplication(sys.argv)
    ex = LayoutTest()
    ex.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    run()

Я знаю, что уже слишком поздно отвечать на этот вопрос, но вот рабочий пример, и вы упустили родительский макет.

...