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?

Foi útil?

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_())
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top