Python PyQt Einstellung Bildlaufbereich
-
21-12-2019 - |
Frage
Ich versuche meine zu machen QGroupBox
scrollbar, sobald es höher als 400 Pixel wird.Die Inhalte in der QGroupBox
werden mit einer for-Schleife generiert.Dies ist ein Beispiel dafür, wie es gemacht wurde.
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)
Da der Wert von val
hängt von einigen anderen Faktoren ab, die myform
die Layoutgröße konnte nicht bestimmt werden.Um das zu lösen, habe ich ein hinzugefügt QScrollableArea
so.
scroll = QtGui.QScrollableArea()
scroll.setWidget(mygroupbox)
scroll.setWidgetResizable(True)
scroll.setFixedHeight(400)
Leider scheint das keine Auswirkungen auf die Groupbox zu haben.Keine Spur von Bildlaufleiste.Vermisse ich etwas?
Lösung
Abgesehen von dem offensichtlichen Tippfehler (ich bin sicher, du meintest QScrollArea
), Ich kann nichts Falsches an dem sehen, was du gepostet hast.Das Problem muss also woanders in Ihrem Code liegen:ein fehlendes Layout vielleicht?
Um sicherzugehen, dass wir auf derselben Seite sind, funktioniert dieses minimale Skript für mich wie erwartet:
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_())