Source code for amaze.visu.widgets.collapsible

from PyQt5.QtCore import Qt, pyqtSlot
from PyQt5.QtWidgets import (
    QSizePolicy,
    QVBoxLayout,
    QToolButton,
    QWidget,
    QGroupBox,
)


[docs] class CollapsibleBox(QWidget): def __init__(self, title="", parent=None): super(CollapsibleBox, self).__init__(parent) self.toggle_button = QToolButton(text=title, checkable=True, checked=False) self.toggle_button.setStyleSheet("QToolButton { border: none; }") self.toggle_button.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) self.toggle_button.setArrowType(Qt.RightArrow) # self.toggle_button.pressed.connect(self.on_pressed) self.toggle_button.toggled.connect(self.on_pressed) self.content_area = QGroupBox() self.content_area.setMinimumHeight(0) self.content_area.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self._maximum_height = self.content_area.maximumHeight() lay = QVBoxLayout() lay.setSpacing(0) lay.setContentsMargins(0, 0, 0, 0) lay.addWidget(self.toggle_button) lay.addWidget(self.content_area) self._set_layout(lay) @pyqtSlot() def on_pressed(self): checked = self.toggle_button.isChecked() self.toggle_button.setArrowType(Qt.DownArrow if not checked else Qt.RightArrow) self.content_area.setMaximumHeight(0 if checked else 1000) def collapsed(self): return self.toggle_button.isChecked() def set_collapsed(self, collapsed): self.toggle_button.setChecked(collapsed)
[docs] def setEnabled(self, enabled: bool, child_only: bool = True): if child_only: self.content_area.setEnabled(enabled) else: # pragma: no cover super().setEnabled(enabled)
def _set_layout(self, layout): super().setLayout(layout)
[docs] def setLayout(self, layout): self.content_area.setLayout(layout)