Qt ProTip:使用QScrollArea时要记住一件非常重要的事情
今天我花了3个小时来弄清楚为什么我的Qt ProTip:使用QScrollArea时要记住一件非常重要的事情,qt,pyqt4,Qt,Pyqt4,今天我花了3个小时来弄清楚为什么我的qscrollara不起作用。最后发现原因是我动态添加到ScrollArea的组件没有任何布局,因此在添加时无法计算其最小大小。 因此,如果有人在QScrollArea中动态添加元素,请确保您的小部件具有某些区域。我看到很多帖子,人们都面临着同样的问题,没有直接的答案,布局是原因,所以这就像一篇帖子通知所有用户,确保你首先在你想要附加到QScrollArea的所有小部件中都有一个布局 谢谢一个例子是 import sys from PyQt4 import
qscrollara
不起作用。最后发现原因是我动态添加到ScrollArea的组件没有任何布局,因此在添加时无法计算其最小大小。
因此,如果有人在QScrollArea中动态添加元素,请确保您的小部件具有某些区域。我看到很多帖子,人们都面临着同样的问题,没有直接的答案,布局是原因,所以这就像一篇帖子通知所有用户,确保你首先在你想要附加到QScrollArea的所有小部件中都有一个布局
谢谢一个例子是
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_())
用户界面文件的链接可以在这里找到看看这个问题:也许你可以避免疯狂的Voters这不是一个问题,我知道,但我把它作为一个提示,让其他人可以从中受益。