3

The code below creates a single dialog with GroupBox() resizing in sync with the dialog. This is default resizing policy for GroupBox. How to change this policy so GroupBox occupies as little space (area) as possible and never expands vertically. How to achieve it?

enter image description here

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_()
alphanumeric
  • 17,967
  • 64
  • 244
  • 392
  • Try something like `panel.layout().addWidget(QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QSizePolicy.Expanding)` right before the confirm button to add a vertical spacer. – 101 Jan 21 '17 at 07:19
  • Put `panel.layout().addStretch()` after the group-box. – ekhumoro Jan 21 '17 at 17:26

1 Answers1

3

The simplest one by ekhumoro:

enter image description here

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_()

The second approach works as well after we replace .addWidget with .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_()
alphanumeric
  • 17,967
  • 64
  • 244
  • 392