File size: 1,168 Bytes
fe2e16c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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)