Source code for madgui.util.layout

"""
Utility functions to deal with layouts.
"""

__all__ = [
    'VBoxLayout',
    'HBoxLayout',
    'Spacing',
    'Stretch',
    'Strut',

]

from PyQt5.QtWidgets import (
    QBoxLayout, QHBoxLayout, QLayout, QLayoutItem, QSpacerItem,
    QVBoxLayout, QWidget)


[docs]class Spacing(int): """Fixed pixel spacing for QLayout."""
[docs]class Stretch(int): """Stretch spacer for QLayout."""
[docs]class Strut(int): """Strut for QLayout."""
transposed_direction = { QBoxLayout.LeftToRight: QBoxLayout.TopToBottom, QBoxLayout.RightToLeft: QBoxLayout.BottomToTop, QBoxLayout.TopToBottom: QBoxLayout.LeftToRight, QBoxLayout.BottomToTop: QBoxLayout.RightToLeft, } def addItem(layout, item): if isinstance(item, tuple): item, args = item[0], item[1:] else: args = () if isinstance(item, QWidget): layout.addWidget(item, *args) elif isinstance(item, QLayout): layout.addLayout(item) elif isinstance(item, QSpacerItem): layout.addSpacerItem(item) elif isinstance(item, QLayoutItem): layout.addItem(item) elif isinstance(item, Spacing): layout.addSpacing(item) elif isinstance(item, Stretch): layout.addStretch(item) elif isinstance(item, Strut): layout.addStrut(item) elif isinstance(item, list): direction = transposed_direction[layout.direction()] sublayout = addItems(QBoxLayout(direction), item) layout.addLayout(sublayout) else: raise NotImplementedError("Unsupported layout item: {!r}" .format(item)) def addItems(layout, items, tight=False): for item in items: addItem(layout, item) if tight: layout.setContentsMargins(0, 0, 0, 0) return layout
[docs]def VBoxLayout(items, tight=False): return addItems(QVBoxLayout(), items, tight=tight)
[docs]def HBoxLayout(items, tight=False): return addItems(QHBoxLayout(), items, tight=tight)