2010-01-25 8 views
1

메인 위젯에 스크롤바를 넣으려고하므로 사용자가 메인 윈도우의 크기를 조정하면 스크롤바가 나타나서 위아래로 움직여 작은 위젯을 볼 수 있습니다 윈도우 위젯으로 좌우로 움직일 수 있습니다. 여기 python Qt : 메인 위젯 스크롤 바

이 모든 GUI를 멋지게 작동하지만 스크롤 바는 표시되지 않습니다 ..
def centralWDG(self,MainWindow): 
    self.centralwidget = QtGui.QWidget(MainWindow) 
    self.centralwidget.setObjectName("centralwidget") 

    self.summaryBox = QtGui.QGroupBox("Project Management Layout") 
    self.summaryBox.setMinimumHeight(300) 
    self.summaryBox.setMinimumWidth(500) 

    self.summaryBoxScroll = QtGui.QScrollArea() 
    self.summaryBoxScroll.setFrameStyle(QtGui.QFrame.NoFrame) 

    self.summaryBoxTopLayout = QtGui.QVBoxLayout(self.summaryBox) 
    self.summaryBoxTopLayout.setContentsMargins(1,1,1,1) 
    self.summaryBoxTopLayout.addWidget(self.summaryBoxScroll) 

    self.summaryBoxScroll.setWidget(self.centralwidget) 

    self.summaryBoxLayout = QtGui.QFormLayout() 
    self.summaryBoxLayout.setSpacing(1) 
    self.summaryBoxLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize) 

    self.summaryBoxLayout = QtGui.QFormLayout(self.centralwidget) 
    self.summaryBoxLayout.setSpacing(1) 
    self.summaryBoxLayout.setSizeConstraint(QtGui.QLayout.SetMinAndMaxSize) 

    self.callchildGUIs() 

    MainWindow.setCentralWidget(self.centralwidget) 

는 시스템이 시작되는 스크롤 바의 주요 위젯의 코드, 그것은 '아무튼 창 크기를 아주 작은 크기로 조정하면 문제가 없습니다. 그래서, 여기에 무엇이 빠져 있습니까?

모든 의견 및 제안은 높이 평가됩니다.

답변

1

QWidget 인 을 기본 창의 중앙 위젯으로 사용하면 스크롤 영역이 창에 추가되지 않습니다. 중앙 위젯이 포함되어 있으면 충분하지 않습니다.

은 다음 코드에 의해 생성 pyuic되었습니다

def setupUi(self, MainWindow): 
    self.centralwidget = QtGui.QWidget(MainWindow) 
    self.centralwidget.setObjectName("centralwidget") 

    self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget) 
    self.verticalLayout.setObjectName("verticalLayout") 

    self.scrollArea = QtGui.QScrollArea(self.centralwidget) 
    self.scrollArea.setWidgetResizable(True) 
    self.scrollArea.setObjectName("scrollArea") 
    self.scrollArea.setWidget(self.scrollAreaWidgetContents) 
    self.verticalLayout.addWidget(self.scrollArea) 

    self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea) 
    self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 778, 527)) 
    self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") 

    self.verticalLayout_2 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents) 
    self.verticalLayout_2.setObjectName("verticalLayout_2") 

    MainWindow.setCentralWidget(self.centralwidget) 

스크롤 영역은 중앙 위젯의 레이아웃에 추가 자체 위젯 컨텐츠를 갖는다. verticalLayout_2 (상위 위젯으로 scrollAreaWidgetContents)에 컨트롤을 추가하면 스크롤 막대가 수신됩니다.

+0

감사합니다. Torsten! – ThreaderSlash

0

나를 보내 주신 제안 사항 중 일부를 추가했습니다. 감사.

self.scrollArea.setWidget (self.scrollAreaWidgetContents)를 사용하려면 scrollAreaWidgetContents를 먼저 선언해야합니다. 업데이트 된 코드는 다음과 같습니다.

def centralWDG(self,MainWindow): 
    self.centralwidget = QtGui.QWidget(MainWindow) 
    self.centralwidget.setObjectName("centralwidget") 

    self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget) 
    self.verticalLayout.setObjectName("verticalLayout") 

    self.scrollArea = QtGui.QScrollArea() 
    self.scrollArea.setWidgetResizable(False) 
    self.scrollArea.setObjectName("scrollArea") 
    self.scrollArea.setMinimumHeight(400) 
    self.scrollArea.setMinimumWidth(400) 
    self.scrollArea.setMaximumHeight(1200) 
    self.scrollArea.setMaximumWidth(1200) 

    self.verticalLayout.addWidget(self.scrollArea) 

    self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea) 
    self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 1400, 1200)) 
    self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") 

    self.callchildGUIs(self.scrollAreaWidgetContents) 

    self.scrollArea.setWidget(self.scrollAreaWidgetContents) 
    self.verticalLayout_2 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents) 
    self.verticalLayout_2.setObjectName("verticalLayout_2") 

    MainWindow.setCentralWidget(self.centralwidget) 

이제 제대로 작동합니다.