2017-06-17 22 views
0

我有一個包含複選框列表的滾動區域。我想這個滾動區域調整大小的應用程序的大小。無法弄清楚如何做到這一點。任何建議,將不勝感激。我在其他帖子中遇到了這個問題,但是還沒有找到解決方案,或者至少是我理解的解決方案。pyqt4:自動調整大小QScrollArea

from PyQt4 import QtGui, QtCore 

class Screen3(QtGui.QWidget):  # Screen to display data 

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

     # layout for check box container widget 
     chkBoxLayout = QtGui.QVBoxLayout(self) 
     # create list of checkboxes 
     self.checkboxes = [] 
     numofCheckboxes = 30 
     for x in range(numofCheckboxes): 
      self.checkboxes.append(QtGui.QCheckBox('test')) 
     # add checkboxes to chkBoxLayout 
     for i, chkbox in enumerate(self.checkboxes): 
      chkbox.setChecked(True) 
      chkBoxLayout.addWidget(chkbox) 
     chkBoxLayout.addStretch(1) 
     chkBoxLayout.setMargin(0); 
     chkBoxLayout.setContentsMargins(0,0,0,0) 
     chkBoxLayout.setSpacing(0) 

     # checkbox container widget  
     widget = QtGui.QWidget() 
     widget.setStyleSheet(""".QWidget {background-color: rgb(255, 255, 255);}""") 
     widget.setLayout(chkBoxLayout) 

     # checkbox scroll area, gives scrollable view on widget 
     scroll = QtGui.QScrollArea() 
     scroll.setMinimumWidth(120) 
     scroll.setMinimumHeight(200) # would be better if resizable 
     scroll.setWidgetResizable(True) 
     scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) 
     scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)   
     scroll.setWidget(widget) 

     self.samplePanel = QtGui.QVBoxLayout() 
     self.samplePanel.addWidget(scroll) 
     self.samplePanel.addStretch(1) 

     # horizontal layout 
     hbox = QtGui.QHBoxLayout() 
     hbox.addLayout(self.samplePanel) 
     hbox.addStretch(1) 
     self.setLayout(hbox) 
     self.resize(100, 500) 

if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    Screen = Screen3() 
    Screen.show() 
    sys.exit(app.exec_()) 
+0

看到我的回答:P – eyllanesc

回答

1

你必須在QScrollArea添加到主佈局,你不需要創建其他佈局。

class Screen3(QtGui.QWidget):  # Screen to display data 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 

     # layout for check box container widget 
     chkBoxLayout = QtGui.QVBoxLayout() 
     # create list of checkboxes 
     self.checkboxes = [] 
     numofCheckboxes = 30 
     for x in range(numofCheckboxes): 
      self.checkboxes.append(QtGui.QCheckBox('test')) 
     # add checkboxes to chkBoxLayout 
     for i, chkbox in enumerate(self.checkboxes): 
      chkbox.setChecked(True) 
      chkBoxLayout.addWidget(chkbox) 
     chkBoxLayout.addStretch(1) 
     chkBoxLayout.setMargin(0); 
     chkBoxLayout.setContentsMargins(0,0,0,0) 
     chkBoxLayout.setSpacing(0) 

     # checkbox container widget  
     widget = QtGui.QWidget() 
     widget.setStyleSheet(""".QWidget {background-color: rgb(255, 255, 255);}""") 
     widget.setLayout(chkBoxLayout) 

     # checkbox scroll area, gives scrollable view on widget 
     scroll = QtGui.QScrollArea() 
     scroll.setMinimumWidth(120) 
     scroll.setMinimumHeight(200) # would be better if resizable 
     scroll.setWidgetResizable(True) 
     scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) 
     scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)   
     scroll.setWidget(widget) 

     lay = QtGui.QVBoxLayout(self) 
     lay.addWidget(scroll) 

+0

是的,這工作,但我過分簡單化我原來的代碼。我也需要一些按鈕,這就是爲什麼我有QVBoxLayout。感謝您的回答,但是我意識到我所需要做的就是刪除self.samplePanel.addStretch(1) – user3276846

+0

感謝您的幫助。 – user3276846