2013-11-18 5 views
2

Я пытаюсь сделать мой QGroupBox прокручиваемым, когда он вырастет выше 400 пикселей. Содержимое в QGroupBox генерируется с использованием цикла for. Это пример того, как это было сделано.Python PyQt Настройка области прокрутки

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) 

К сожалению, это не влияет на групповой бокс. Никаких признаков полосы прокрутки. Мне что-то не хватает?

ответ

9

Кроме очевидной опечатки (я уверен, что вы имели в виду 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_()) 
+0

спасибо. я нашел свою ошибку, я положил 'QGroupBox' в окончательный макет вместо того, чтобы ставить' QScrollArea'. Теперь работает. –