QScrollArea正在扩展而不是滚动

时间:2014-09-01 17:52:57

标签: python pyqt4 qscrollarea

我有一个QScrollArea,我会添加一些其他小部件。我想要的是QScrollArea在其中的小部件扩展其大小时开始滚动。

但滚动区域开始扩展。

这是我用过的代码:

import sys
from PyQt4 import QtGui, QtCore

class Widget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.vbox = QtGui.QVBoxLayout()
        self.setLayout(self.vbox)

    def add_button(self):
        tmp = QtGui.QPushButton("...", self)
        self.vbox.addWidget(tmp)

class ScrollArea(QtGui.QScrollArea):
    def __init__(self, parent=None):
        QtGui.QScrollArea.__init__(self, parent)

        self.vbox = QtGui.QVBoxLayout()

        self.w = Widget(self)
        self.setWidget(self.w)    #set the widget to provide scrolling for here
        self.vbox.addWidget(self.w)

        self.plus = QtGui.QPushButton("button", self)
        self.connect(self.plus, QtCore.SIGNAL("clicked()"), self.add_button)
        self.vbox.addWidget(self.plus)

        self.setLayout(self.vbox)

    def add_button(self):
        self.w.add_button()

app = QtGui.QApplication(sys.argv)
main = ScrollArea()
main.show()
sys.exit(app.exec_())

我还尝试在类self.w中设置子窗口小部件ScrollArea的布局,而不是在自己的类中,但它具有相同的效果。

1 个答案:

答案 0 :(得分:1)

正如Bakuriu已经指出的那样,重要的是不要将自己的布局应用于QScrollArea,而只是通过{{指定一个小部件(在下面用w表示) 1}}作为滚动区应该注意的那个。

在调用setWidget 之前设置w 的布局非常重要,如果想要将其他几个孩子添加到setWidget(例如{ {1}}在上述问题中)为w的布局调用QPushButton也很重要(例如setSizeConstraint,有关更多选项,请参阅this )。关于w的行为的详细信息,请关注this link

以下代码是一个工作示例:

setSizeContraint(QLayout.SetMinAndMaxSize)