Pyside - 滚动区域:添加项目时,我的滚动区域不会滚动

时间:2014-07-05 22:23:01

标签: python pyside qscrollarea

我正在尝试创建一个搜索重复文件的程序,并在Qt界面中添加这些重复的文件。

我的想法是搜索重复的文件并在滚动区域中显示这些项目。

问题在于,当我向滚动区域添加项目时,项目不会留在我打算成为滚动的空间中。

我尝试阅读许多教程并提供帮助,但我无法使其工作

下面我输入了我的代码:

为了加快速度,我正在开发

__author__ = 'alvaro'

from PySide.QtGui import QWidget, QVBoxLayout, QLabel, QLineEdit, QApplication,QToolButton, QHBoxLayout,QCheckBox, QComboBox, QGridLayout,QScrollArea
from PySide.QtCore import QObject, SIGNAL
import sys

class MainDupFiles(QWidget):
    def __init__(self):
        super(MainDupFiles, self).__init__()
        self.interface()


    def interface(self):
        self.setMaximumHeight(500)
        self.vBoxTop = QVBoxLayout(self)
        self.inputLabel = QLabel("Digite aqui o caminho de pasta que deseja verificar arquivos repetidos")
        self.inputLine = QLineEdit()

        self.vBoxTop.addWidget(self.inputLabel)
        self.vBoxTop.addWidget(self.inputLine)
        self.vBoxTop.setContentsMargins(10,10,10,0)


        self.searchBtn = QToolButton()
        self.searchBtn.setText("Search")

        self.reportBtn = QToolButton()
        self.reportBtn.setText("Generate Report")

        self.deleteBtn = QToolButton()
        self.deleteBtn.setText("Delete Repeated Files")

        self.delAllCheckBox = QCheckBox("Delete All Files")
        self.delGroupCheckBox = QCheckBox("Delete This Group")

        self.groupCompoBox = QComboBox()
        self.groupCompoBox.addItem("Select the File name")
        self.groupCompoBox.setMinimumWidth(200)

        self.hWidget = QWidget(self)
        self.hBoxBtn = QHBoxLayout(self.hWidget)

        self.hBoxBtn.addWidget(self.searchBtn)
        self.hBoxBtn.addWidget(self.reportBtn)
        self.hBoxBtn.addWidget(self.deleteBtn)
        self.hBoxBtn.addWidget(self.groupCompoBox)
        self.hBoxBtn.addWidget(self.delGroupCheckBox)
        self.hBoxBtn.addWidget(self.delAllCheckBox)

        self.vBoxTop.addWidget(self.hWidget)

        QObject.connect(self.searchBtn, SIGNAL("clicked()"), self.addLines)

    def addLines(self):
        self.bottonWidget = QWidget()
        self.outputWidget = QWidget()

        self.outPutGrid = QGridLayout(self.outputWidget)
        for i in range(10):
            self.outPutGrid.addWidget(QLabel("TESTE"))

        self.scroll = QScrollArea(self.bottonWidget)
        self.scroll.setMinimumHeight(400)
        self.outPutGrid.addWidget(self.bottonWidget)
        self.scroll.setWidget(self.outputWidget)
        self.vBoxTop.addWidget(self.scroll)


if __name__ == "__main__":
    qt_app = QApplication(sys.argv)
    app = MainDupFiles()
    app.show()
    qt_app.exec_()

我该怎么做才能让它有效? 顺便说一句,我用QtDesiner代码试过了同样的问题,我遇到了同样的问题。

1 个答案:

答案 0 :(得分:1)

addLines方法中,您创建了以bottomWidget作为其父级的滚动区域。

然后将bottomWidget添加到outputWidget´s layout, which makes outputWidget`其父级。

然后您将outputWidget设置为scroll的内容窗口小部件,因此您可以间接将滚动区域放入其中:

scroll --> outputWidget --> bottonWidget --> scroll --> outputWidget...

如果我更换

self.scroll = QScrollArea(self.bottonWidget)

使用:

self.scroll = QScrollArea(self)

一切正常。