Área de rolagem de configuração do Python PyQt
-
21-12-2019 - |
Pergunta
Estou tentando fazer o meu QGroupBox
rolável quando ultrapassar 400px.O conteúdo no QGroupBox
são gerados usando um loop for.Este é um exemplo de como isso foi feito.
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)
Já que o valor de val
depende de alguns outros fatores, o myform
o tamanho do layout não pôde ser determinado.Para resolver isso, adicionei um QScrollableArea
assim.
scroll = QtGui.QScrollableArea()
scroll.setWidget(mygroupbox)
scroll.setWidgetResizable(True)
scroll.setFixedHeight(400)
Infelizmente, isso não parece ter nenhum efeito na caixa de grupo.Nenhum sinal de barra de rolagem.Estou faltando alguma coisa?
Solução
Além do erro de digitação óbvio (tenho certeza que você quis dizer QScrollArea
), não vejo nada de errado com o que você postou.Portanto, o problema deve estar em outro lugar do seu código:um layout faltando, talvez?
Só para ter certeza de que estamos na mesma página, este script mínimo funciona conforme o esperado para mim:
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(400)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(scroll)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window(25)
window.setGeometry(500, 300, 300, 400)
window.show()
sys.exit(app.exec_())