Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyqt4:自动调整QScrollArea的大小_Python_Pyqt_Pyqt4 - Fatal编程技术网

Python pyqt4:自动调整QScrollArea的大小

Python pyqt4:自动调整QScrollArea的大小,python,pyqt,pyqt4,Python,Pyqt,Pyqt4,我有一个包含复选框列表的滚动区域。我想这个滚动区域的大小调整到应用程序的大小。我不知道怎么做。如有任何建议,将不胜感激。我在其他帖子中也遇到过这个问题,但没有找到解决方案,或者至少没有找到我理解的解决方案 from PyQt4 import QtGui, QtCore class Screen3(QtGui.QWidget): # Screen to display data def __init__(self, parent=None): QtGui.Q

我有一个包含复选框列表的滚动区域。我想这个滚动区域的大小调整到应用程序的大小。我不知道怎么做。如有任何建议,将不胜感激。我在其他帖子中也遇到过这个问题,但没有找到解决方案,或者至少没有找到我理解的解决方案

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_())

您必须将
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)

请参阅我的答案:PYes这是可行的,但我过度简化了我的原始代码。我还需要一些按钮,这就是为什么我有QVBoxLayout。谢谢你的回答,但是我意识到我所需要做的就是移除self.samplePanel.addStretch(1)谢谢你的帮助。