Область прокрутки настроек Python PyQt
-
21-12-2019 - |
Вопрос
Я пытаюсь сделать свой QGroupBox
прокручивается, как только его размер превышает 400 пикселей.Содержимое в QGroupBox
генерируются с использованием цикла for.Это пример того, как это было сделано.
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)
Поскольку значение val
зависит от некоторых других факторов, myform
Размер макета определить не удалось.Чтобы решить эту проблему, я добавил QScrollableArea
так.
scroll = QtGui.QScrollableArea()
scroll.setWidget(mygroupbox)
scroll.setWidgetResizable(True)
scroll.setFixedHeight(400)
К сожалению, это, похоже, не оказывает никакого влияния на групповой блок.Никаких признаков полосы прокрутки.Я что-то упускаю?
Решение
Если не считать очевидной опечатки (я уверен, вы имели в виду QScrollArea
), я не вижу ничего плохого в том, что вы опубликовали.Таким образом, проблема должна заключаться в другом месте вашего кода:может отсутствующая планировка?
Чтобы убедиться, что мы находимся на одной волне, этот минимальный скрипт работает для меня так, как и ожидалось:
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_())