Question

J'essaie de faire mon QGroupBox défilable une fois qu'il dépasse 400 px.Le contenu dans le QGroupBox sont générés à l’aide d’une boucle for.Ceci est un exemple de la façon dont cela a été fait.

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)

Puisque la valeur de val dépend d'autres facteurs, le myform la taille de la mise en page n’a pas pu être déterminée.Afin de résoudre ce problème, j'ai ajouté un QScrollableArea comme ça.

scroll = QtGui.QScrollableArea()
scroll.setWidget(mygroupbox)
scroll.setWidgetResizable(True)
scroll.setFixedHeight(400)

Malheureusement, cela ne semble avoir aucun effet sur la zone de groupe.Aucun signe de barre de défilement.Est-ce que j'ai raté quelque chose ?

Était-ce utile?

La solution

À part la faute de frappe évidente (je suis sûr que vous vouliez dire QScrollArea), je ne vois rien de mal à ce que vous avez posté.Le problème doit donc résider ailleurs dans votre code :une mise en page manquante peut-être ?

Juste pour m'assurer que nous sommes sur la même longueur d'onde, ce script minimal fonctionne comme prévu pour moi :

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_())
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top