Qscrollarea不显示滚动条,布局弹出不合适

时间:2010-12-18 01:23:23

标签: python qt pyqt

昨晚我花了很多时间试图让这个QScrollArea工作。我想要做的是在菜单下添加一个顶部水平菜单布局和一个可滚动的垂直内容布局。滚动条不可见,只要我向其添加新元素,内容布局就会弹出不适当的位置(通过单击其中一个菜单按钮)。

请帮帮我。 :)

此致 Lars Erik

import sys 
from PyQt4 import QtCore, QtGui, Qt 

class MainWindow( QtGui.QMainWindow ): 

    def __init__( self ): 

        QtGui.QMainWindow.__init__( self ) 

        self.centralWidget = QtGui.QWidget() 
        self.setCentralWidget( self.centralWidget ) 

        #Main Layout 
        layout = QtGui.QVBoxLayout() 
        layout.setSpacing( 0 )         
        self.centralWidget.setLayout( layout ) 

        #Top Menu Layout 
        hLayout = QtGui.QHBoxLayout() 
        layout.addLayout( hLayout ) 

        i = 0 
        while i < 5: 
            addContent = QtGui.QPushButton( 'Add Content' ) 
            hLayout.addWidget( addContent ) 

            self.connect(addContent, QtCore.SIGNAL('clicked()'), self.addContent)             
            i += 1 

        #Content Layout 
        self.lowerWidget = QtGui.QWidget() 
        #self.lowerWidget.setMaximumSize( Qt.QSize(150, 250) ) 

        self.scrollArea = QtGui.QScrollArea() 
        self.scrollArea.setWidget( self.lowerWidget )           

        layout.addWidget( self.lowerWidget )   

        self.vLayout = QtGui.QVBoxLayout() 
        self.lowerWidget.setLayout( self.vLayout ) 

        i = 0 
        while i < 25: 
            label = QtGui.QLabel( 'Content' ) 
            self.vLayout.addWidget( label ) 
            i += 1             


    def addContent(self): 

        label = QtGui.QLabel( 'Content' ) 
        self.vLayout.addWidget( label ) 


if __name__ == '__main__': 

    app = QtGui.QApplication(sys.argv) 
    mainWin = MainWindow() 
    mainWin.show() 
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:3)

这看起来不对:

self.scrollArea = QtGui.QScrollArea() 
self.scrollArea.setWidget( self.lowerWidget )           

layout.addWidget( self.lowerWidget )

您将lowerWidget添加到scrollarea,只是为了在下一步中将它添加到布局中,这会从scrollarea中删除lowerWidget并重新显示其顶级窗口小部件。 您必须将scrollarea添加到布局:

self.scrollArea = QtGui.QScrollArea() 
self.scrollArea.setWidget( self.lowerWidget )       

layout.addWidget( self.scrollArea )