Python PyQt Impostazione dell'area di scorrimento
-
21-12-2019 - |
Domanda
Sto cercando di fare il mio QGroupBox
scorrevole una volta che supera i 400 px.I contenuti in QGroupBox
vengono generati utilizzando un ciclo for.Questo è un esempio di come è stato fatto.
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)
Dal valore di val
dipende da alcuni altri fattori, il myform
Non è stato possibile determinare la dimensione del layout.Per risolvere questo problema, ho aggiunto a QScrollableArea
come questo.
scroll = QtGui.QScrollableArea()
scroll.setWidget(mygroupbox)
scroll.setWidgetResizable(True)
scroll.setFixedHeight(400)
Sfortunatamente, ciò non sembra avere alcun effetto sul groupbox.Nessun segno di barra di scorrimento.Mi sto perdendo qualcosa?
Soluzione
A parte l'ovvio errore di battitura (sono sicuro che intendevi QScrollArea
), non vedo nulla di sbagliato in ciò che hai pubblicato.Quindi il problema deve trovarsi altrove nel codice:forse un layout mancante?
Giusto per assicurarci che siamo sulla stessa lunghezza d'onda, questo script minimo funziona come previsto per me:
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_())