[PyQt] need help with sizing QStackedWidgets

Eric Frederich eric.frederich at gmail.com
Mon Aug 26 15:34:57 BST 2013


Replying to self with a solution in case someone else comes across this
problem.
david_boddie on freenode's #pyqt channel helped me out.

A solution was to call....
    layout.setRowStretch(len(labels), 1)
... after adding the spacer.

Another solution was to nest the grid layout into a BoxLayout and call
addStretch.


On Mon, Aug 26, 2013 at 9:36 AM, Eric Frederich <eric.frederich at gmail.com>wrote:

> Would appreciate some help here.
> I don't like how these stacked widgets take up all of this vertical space
> when the window is resized.
> I have tried setting a size policy to minimum on the stacked widgets but
> no luck.
>
>
> On Fri, Aug 23, 2013 at 4:02 PM, Eric Frederich <eric.frederich at gmail.com>wrote:
>
>> Here is a small example.
>> I tried putting a vertical spacer on the bottom yet these stacked widgets
>> want to take up space when resized.
>>
>> #!/usr/bin/env python
>>
>> from PyQt4.QtCore import *
>> from PyQt4.QtGui import *
>>
>> class TestWidget(QWidget):
>>     def __init__(self, labels, parent=None):
>>         super(TestWidget, self).__init__(parent)
>>
>>         layout = QGridLayout()
>>         for i, output in enumerate(labels):
>>
>>             layout.addWidget(QLabel(output), i, 0)
>>             combo = QComboBox()
>>             combo.addItems([
>>                 "Slider",
>>                 "Spinner",
>>             ])
>>             layout.addWidget(combo, i, 1)
>>
>>             stack = QStackedWidget()
>>
>>             horizontalSlider = QSlider()
>>             horizontalSlider.setOrientation(Qt.Horizontal)
>>
>>             spinner = QSpinBox()
>>
>>             spinner.valueChanged.connect(horizontalSlider.setValue)
>>             horizontalSlider.valueChanged.connect(spinner.setValue)
>>
>>             stack.addWidget(horizontalSlider)
>>             stack.addWidget(spinner)
>>
>>             combo.currentIndexChanged.connect(stack.setCurrentIndex)
>>
>>             layout.addWidget(stack, i, 2)
>>
>>         vertical_spacer = QSpacerItem(0, 0, QSizePolicy.Minimum,
>> QSizePolicy.Expanding)
>>         layout.addItem(vertical_spacer, len(labels), 0, 1, 3)
>>
>>         self.setLayout(layout)
>>
>> if __name__ == '__main__':
>>     import sys
>>     app = QApplication(sys.argv)
>>     ocw = TestWidget(['a', 'b', 'c', 'd', 'e'])
>>     ocw.show()
>>     sys.exit(app.exec_())
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20130826/2a66d260/attachment.html>


More information about the PyQt mailing list