|
from PyQt5.QtWidgets import QWidget, QToolButton, QVBoxLayout |
|
from PyQt5.QtCore import Qt |
|
|
|
class CollapsibleBox(QWidget): |
|
"""A simple collapsible container widget with a chevron arrow.""" |
|
def __init__(self, title: str = "", parent=None): |
|
super().__init__(parent) |
|
self.toggle = QToolButton(text=title, checkable=True, checked=True) |
|
self.toggle.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) |
|
self.toggle.setArrowType(Qt.DownArrow) |
|
self.toggle.clicked.connect(self.on_toggled) |
|
self.toggle.setStyleSheet("QToolButton { border: none; font-weight:600; padding:6px; }") |
|
|
|
self.content = QWidget() |
|
self.content_layout = QVBoxLayout() |
|
self.content_layout.setContentsMargins(8, 4, 8, 8) |
|
self.content.setLayout(self.content_layout) |
|
|
|
lay = QVBoxLayout(self) |
|
lay.setSpacing(0) |
|
lay.setContentsMargins(0, 0, 0, 0) |
|
lay.addWidget(self.toggle) |
|
lay.addWidget(self.content) |
|
|
|
def on_toggled(self): |
|
checked = self.toggle.isChecked() |
|
self.toggle.setArrowType(Qt.DownArrow if checked else Qt.RightArrow) |
|
self.content.setVisible(checked) |