ProTip:使用QScrollArea时要记住的非常重要的事情

时间:2015-12-25 13:13:56

标签: qt pyqt4

今天我花了3个小时来确定我的QScrollArea无效的原因。最后发现原因是我动态添加到ScrollArea的组件没有任何布局,因此在添加时无法计算它的最小大小。 因此,如果有人动态地向QScrollArea添加元素,请确保您的小部件有一些区域。我看到很多帖子里的人都面临着同样的问题而没有直接回答布局是原因所以这就像是一个帖子通知所有用户,以确保你首先在你想要的所有小部件中都有一个布局附加到QScrollArea。

谢谢

1 个答案:

答案 0 :(得分:0)

一个例子是

import sys

from PyQt4 import QtCore, QtGui, uic


mainBase, mainForm = uic.loadUiType("main.ui")
labelBase, labelForm = uic.loadUiType("labelsForScroll.ui")
dataBase, dataForm = uic.loadUiType("data.ui")
emptyBase, emptyForm = uic.loadUiType("empty.ui")

class Data(dataBase, dataForm):
    def __init__(self, parent=None):
        super(dataBase, self).__init__(parent)
        self.setupUi(self)

    def setSl(self, num):
        self.sl.setText(str(num))

class Label(labelBase, labelForm):
    def __init__(self, parent=None):
        super(labelBase, self).__init__(parent)
        self.setupUi(self)


class Empty(emptyBase, emptyForm):
    def __init__(self, parent=None):
        super(emptyBase, self).__init__(parent)
        self.setupUi(self)

class Main(mainBase, mainForm):

    def __init__(self, parent=None):
        super(mainBase, self).__init__(parent)
        self.setupUi(self)
        self.__l = Label()
        #self.vert.addWidget(l)
        self.__maxSlNum = 0
        self.__datLis =[]
        #self.addField()
        self.__e = Empty()
        self.__e.layout().addWidget(self.__l)

        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setWidget(self.__e)

        QtCore.QObject.connect(self.add, QtCore.SIGNAL("clicked()"), self.addField)




    def addField(self):
        d = Data()
        self.__maxSlNum+=1
        d.setSl(self.__maxSlNum)
        self.__datLis.append(d)
        lay = self.__e.layout()
        lay.addWidget( d)




if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    app.setStyle("cleanlooks")
    m = Main()
    m.show()
    sys.exit(app.exec_())
可以在links

找到ui文件的

链接