pytermgui.widgets.collapsible
The Collapsible widget type.
View Source
0"""The Collapsible widget type.""" 1 2from __future__ import annotations 3 4from typing import Any 5 6from ..input import keys 7from ..enums import Overflow 8from .interactive import Toggle 9from .containers import Container 10 11 12__all__ = ["Collapsible"] 13 14 15class Collapsible(Container): 16 """A collapsible section of UI.""" 17 18 is_bindable = True 19 20 def __init__( 21 self, label: str, *items: Any, keyboard: bool = False, **attrs: Any 22 ) -> None: 23 """Initializes the widget. 24 25 Args: 26 label: The label for the trigger toggle. 27 *items: The items that will be hidden when the object is collapsed. 28 keyboard: If set, the first character of the label will be used as 29 a `CTRL_` binding to toggle the object. 30 """ 31 32 if keyboard: 33 bind = label[0] 34 self.trigger = Toggle( 35 (f"▶ ({bind}){label[1:]}", f"▼ ({bind}){label[1:]}"), 36 lambda *_: self.toggle(), 37 ) 38 else: 39 self.trigger = Toggle( 40 (f"▶ {label}", f"▼ {label}"), lambda *_: self.toggle() 41 ) 42 43 super().__init__(self.trigger, *items, box="EMPTY", **attrs) 44 45 if keyboard: 46 self.bind( 47 getattr(keys, f"CTRL_{bind}"), 48 lambda *_: self.trigger.toggle(), 49 "Open dropdown", 50 ) 51 52 self.collapsed_height = 1 53 self.overflow = Overflow.HIDE 54 self.height = self.collapsed_height 55 56 self._is_expanded = False 57 58 def toggle(self) -> Collapsible: 59 """Toggles expanded state. 60 61 Returns: 62 This object. 63 """ 64 65 if self.trigger.checked != self._is_expanded: 66 self.trigger.toggle(run_callback=False) 67 68 self._is_expanded = not self._is_expanded 69 70 if self._is_expanded: 71 self.overflow = Overflow.RESIZE 72 else: 73 self.overflow = Overflow.HIDE 74 self.height = self.collapsed_height 75 76 return self 77 78 def collapse(self) -> Collapsible: 79 """Collapses the dropdown. 80 81 Does nothing if already collapsed. 82 83 Returns: 84 This object. 85 """ 86 87 if self._is_expanded: 88 self.toggle() 89 90 return self 91 92 def expand(self) -> Collapsible: 93 """Expands the dropdown. 94 95 Does nothing if already expanded. 96 97 Returns: 98 This object. 99 """ 100 101 if not self._is_expanded: 102 self.toggle() 103 104 return self
View Source
16class Collapsible(Container): 17 """A collapsible section of UI.""" 18 19 is_bindable = True 20 21 def __init__( 22 self, label: str, *items: Any, keyboard: bool = False, **attrs: Any 23 ) -> None: 24 """Initializes the widget. 25 26 Args: 27 label: The label for the trigger toggle. 28 *items: The items that will be hidden when the object is collapsed. 29 keyboard: If set, the first character of the label will be used as 30 a `CTRL_` binding to toggle the object. 31 """ 32 33 if keyboard: 34 bind = label[0] 35 self.trigger = Toggle( 36 (f"▶ ({bind}){label[1:]}", f"▼ ({bind}){label[1:]}"), 37 lambda *_: self.toggle(), 38 ) 39 else: 40 self.trigger = Toggle( 41 (f"▶ {label}", f"▼ {label}"), lambda *_: self.toggle() 42 ) 43 44 super().__init__(self.trigger, *items, box="EMPTY", **attrs) 45 46 if keyboard: 47 self.bind( 48 getattr(keys, f"CTRL_{bind}"), 49 lambda *_: self.trigger.toggle(), 50 "Open dropdown", 51 ) 52 53 self.collapsed_height = 1 54 self.overflow = Overflow.HIDE 55 self.height = self.collapsed_height 56 57 self._is_expanded = False 58 59 def toggle(self) -> Collapsible: 60 """Toggles expanded state. 61 62 Returns: 63 This object. 64 """ 65 66 if self.trigger.checked != self._is_expanded: 67 self.trigger.toggle(run_callback=False) 68 69 self._is_expanded = not self._is_expanded 70 71 if self._is_expanded: 72 self.overflow = Overflow.RESIZE 73 else: 74 self.overflow = Overflow.HIDE 75 self.height = self.collapsed_height 76 77 return self 78 79 def collapse(self) -> Collapsible: 80 """Collapses the dropdown. 81 82 Does nothing if already collapsed. 83 84 Returns: 85 This object. 86 """ 87 88 if self._is_expanded: 89 self.toggle() 90 91 return self 92 93 def expand(self) -> Collapsible: 94 """Expands the dropdown. 95 96 Does nothing if already expanded. 97 98 Returns: 99 This object. 100 """ 101 102 if not self._is_expanded: 103 self.toggle() 104 105 return self
A collapsible section of UI.
View Source
21 def __init__( 22 self, label: str, *items: Any, keyboard: bool = False, **attrs: Any 23 ) -> None: 24 """Initializes the widget. 25 26 Args: 27 label: The label for the trigger toggle. 28 *items: The items that will be hidden when the object is collapsed. 29 keyboard: If set, the first character of the label will be used as 30 a `CTRL_` binding to toggle the object. 31 """ 32 33 if keyboard: 34 bind = label[0] 35 self.trigger = Toggle( 36 (f"▶ ({bind}){label[1:]}", f"▼ ({bind}){label[1:]}"), 37 lambda *_: self.toggle(), 38 ) 39 else: 40 self.trigger = Toggle( 41 (f"▶ {label}", f"▼ {label}"), lambda *_: self.toggle() 42 ) 43 44 super().__init__(self.trigger, *items, box="EMPTY", **attrs) 45 46 if keyboard: 47 self.bind( 48 getattr(keys, f"CTRL_{bind}"), 49 lambda *_: self.trigger.toggle(), 50 "Open dropdown", 51 ) 52 53 self.collapsed_height = 1 54 self.overflow = Overflow.HIDE 55 self.height = self.collapsed_height 56 57 self._is_expanded = False
Initializes the widget.
Args
- label: The label for the trigger toggle.
- *items: The items that will be hidden when the object is collapsed.
- keyboard: If set, the first character of the label will be used as
a
CTRL_
binding to toggle the object.
Allow binding support
View Source
59 def toggle(self) -> Collapsible: 60 """Toggles expanded state. 61 62 Returns: 63 This object. 64 """ 65 66 if self.trigger.checked != self._is_expanded: 67 self.trigger.toggle(run_callback=False) 68 69 self._is_expanded = not self._is_expanded 70 71 if self._is_expanded: 72 self.overflow = Overflow.RESIZE 73 else: 74 self.overflow = Overflow.HIDE 75 self.height = self.collapsed_height 76 77 return self
Toggles expanded state.
Returns
This object.
View Source
Collapses the dropdown.
Does nothing if already collapsed.
Returns
This object.
View Source
Expands the dropdown.
Does nothing if already expanded.
Returns
This object.
Inherited Members
- pytermgui.widgets.containers.Container
- overflow
- styles
- chars
- keys
- serialized
- vertical_align
- allow_fullscreen
- sidelength
- content_dimensions
- selectables
- selectables_length
- selected
- box
- get_change
- lazy_add
- get_lines
- set_widgets
- serialize
- pop
- remove
- set_recursive_depth
- select
- center
- handle_mouse
- execute_binding
- handle_key
- wipe
- debug