Как контролировать изменение размера QGroupBox

В приведенном ниже коде создается одно диалоговое окно с изменением размера GroupBox() синхронно с диалоговым окном. Это политика изменения размера по умолчанию для GroupBox. Как изменить эту политику, чтобы GroupBox занимало как можно меньше места (области) и никогда не расширялось по вертикали. Как этого достичь?

введите здесь описание изображения

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

panel=QtGui.QDialog()
panel.setLayout(QtGui.QVBoxLayout())

groupbox = QtGui.QGroupBox('Group Box')
groupbox.setLayout(QtGui.QVBoxLayout())
panel.layout().addWidget(groupbox)

for i in range(3):
    row = QtGui.QHBoxLayout()
    row.addWidget(QtGui.QLabel('Label'))
    row.addWidget(QtGui.QLineEdit())
    row.addWidget(QtGui.QPushButton('Push Button'))
    groupbox.layout().addLayout(row)

panel.layout().addWidget(QtGui.QPushButton('Confirm'))

panel.show()
app.exec_()

person alphanumeric    schedule 21.01.2017    source источник
comment
Попробуйте что-то вроде panel.layout().addWidget(QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QSizePolicy.Expanding) прямо перед кнопкой подтверждения, чтобы добавить вертикальный разделитель.   -  person all or None    schedule 21.01.2017
comment
Поставьте panel.layout().addStretch() после группового поля.   -  person ekhumoro    schedule 21.01.2017


Ответы (1)


Самый простой от эхуморо:

введите здесь описание изображения

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

panel=QtGui.QDialog()
panel.setLayout(QtGui.QVBoxLayout())

groupbox = QtGui.QGroupBox('Group Box')
groupbox.setLayout(QtGui.QVBoxLayout())
panel.layout().addWidget(groupbox)
panel.layout().addStretch()

for i in range(3):
    row = QtGui.QHBoxLayout()
    row.addWidget(QtGui.QLabel('Label'))
    row.addWidget(QtGui.QLineEdit())
    row.addWidget(QtGui.QPushButton('Push Button'))
    groupbox.layout().addLayout(row)

panel.layout().addWidget(QtGui.QPushButton('Confirm'))

panel.show()
app.exec_()

Второй подход также работает после замены .addWidget на .addItem:

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

panel=QtGui.QDialog()
panel.setLayout(QtGui.QVBoxLayout())

groupbox = QtGui.QGroupBox('Group Box')
groupbox.setLayout(QtGui.QVBoxLayout())
panel.layout().addWidget(groupbox)
panel.layout().addItem(QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding))
for i in range(3):
    row = QtGui.QHBoxLayout()
    row.addWidget(QtGui.QLabel('Label'))
    row.addWidget(QtGui.QLineEdit())
    row.addWidget(QtGui.QPushButton('Push Button'))
    groupbox.layout().addLayout(row)

panel.layout().addWidget(QtGui.QPushButton('Confirm'))

panel.show()
app.exec_()
person alphanumeric    schedule 25.01.2017