Qscrollarea не отображает полосу прокрутки и раскладки высовываются - PullRequest
1 голос
/ 18 декабря 2010

Я провел прошлую ночь, пытаясь заставить эту QScrollArea работать без какой-либо удачи. То, что я пытаюсь сделать, это добавить верхний горизонтальный макет меню и прокручиваемый вертикальный макет контента под меню. Полоса прокрутки не видна, и компоновка содержимого вылетает с места, как только я добавляю в нее новые элементы (нажатием одной из кнопок меню).

Пожалуйста, помогите мне. :)

С уважением, Ларс Эрик

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 Ответ

3 голосов
/ 18 декабря 2010

Это выглядит неправильно:

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

layout.addWidget( self.lowerWidget )

Вы добавляете lowerWidget к scrollarea, просто чтобы добавить его к макету на следующем шаге, который удаляет lowerWidget из scrollarea и перерисовывает его виджет верхнего уровня.Вы должны добавить scrollarea в макет:

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

layout.addWidget( self.scrollArea )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...