2017-06-17 19 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