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)谢谢你的帮助。