I am trying to make my QGroupBox
scrollable once it grow higher than 400px. The contents in the QGroupBox
are generated using a for loop. This is an example of how it was done.
mygroupbox = QtGui.QGroupBox('this is my groupbox')
myform = QtGui.QFormLayout()
labellist = []
combolist = []
for i in range(val):
labellist.append(QtGui.QLabel('mylabel'))
combolist.append(QtGui.QComboBox())
myform.addRow(labellist[i],combolist[i])
mygroupbox.setLayout(myform)
Since the value of val
depends on some other factors, the myform
layout size could not be determined. In order to solve this, i added a QScrollableArea
like this.
scroll = QtGui.QScrollableArea()
scroll.setWidget(mygroupbox)
scroll.setWidgetResizable(True)
scroll.setFixedHeight(400)
Unfortunately, that doesn't seems to make any effect on the groupbox. No sign of scrollbar. Am i missing somthing?
Other than the obvious typo (I'm sure you meant QScrollArea
), I can't see anything wrong with what you've posted. So the problem must lie elsewhere in your code: a missing layout maybe? Just to make sure we're on the same page, the minimal script below works as expected for me:
PyQt5
from PyQt5 import QtWidgets
class Window(QtWidgets.QWidget):
def __init__(self, val):
super().__init__()
mygroupbox = QtWidgets.QGroupBox('this is my groupbox')
myform = QtWidgets.QFormLayout()
labellist = []
combolist = []
for i in range(val):
labellist.append(QtWidgets.QLabel('mylabel'))
combolist.append(QtWidgets.QComboBox())
myform.addRow(labellist[i],combolist[i])
mygroupbox.setLayout(myform)
scroll = QtWidgets.QScrollArea()
scroll.setWidget(mygroupbox)
scroll.setWidgetResizable(True)
scroll.setFixedHeight(200)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(scroll)
if __name__ == '__main__':
app = QtWidgets.QApplication(['Test'])
window = Window(12)
window.setGeometry(500, 300, 300, 200)
window.show()
app.exec_()
PyQt4
from PyQt4 import QtGui
class Window(QtGui.QWidget):
def __init__(self, val):
QtGui.QWidget.__init__(self)
mygroupbox = QtGui.QGroupBox('this is my groupbox')
myform = QtGui.QFormLayout()
labellist = []
combolist = []
for i in range(val):
labellist.append(QtGui.QLabel('mylabel'))
combolist.append(QtGui.QComboBox())
myform.addRow(labellist[i],combolist[i])
mygroupbox.setLayout(myform)
scroll = QtGui.QScrollArea()
scroll.setWidget(mygroupbox)
scroll.setWidgetResizable(True)
scroll.setFixedHeight(200)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(scroll)
if __name__ == '__main__':
app = QtGui.QApplication(['Test'])
window = Window(12)
window.setGeometry(500, 300, 300, 200)
window.show()
app.exec_()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With