pytermgui.widgets.interactive.checkbox
This module contains the Checkbox
class.
View Source
0"""This module contains the `Checkbox` class.""" 1 2from __future__ import annotations 3from typing import Any, Callable 4 5from .button import Button 6 7 8# TODO: Rewrite this to also have a label 9class Checkbox(Button): 10 """A simple checkbox""" 11 12 chars = { 13 **Button.chars, 14 **{"delimiter": ["[", "]"], "checked": "X", "unchecked": " "}, 15 } 16 17 def __init__( 18 self, 19 callback: Callable[[Any], Any] | None = None, 20 checked: bool = False, 21 **attrs: Any, 22 ) -> None: 23 """Initialize object""" 24 25 unchecked = self._get_char("unchecked") 26 assert isinstance(unchecked, str) 27 28 super().__init__(unchecked, onclick=self.toggle, **attrs) 29 30 self.callback = None 31 self.checked = False 32 if self.checked != checked: 33 self.toggle(run_callback=False) 34 35 self.callback = callback 36 37 def _run_callback(self) -> None: 38 """Run the checkbox callback with the new checked flag as its argument""" 39 40 if self.callback is not None: 41 self.callback(self.checked) 42 43 def toggle(self, *_: Any, run_callback: bool = True) -> None: 44 """Toggle state""" 45 46 chars = self._get_char("checked"), self._get_char("unchecked") 47 assert isinstance(chars[0], str) and isinstance(chars[1], str) 48 49 self.checked ^= True 50 if self.checked: 51 self.label = chars[0] 52 else: 53 self.label = chars[1] 54 55 self.get_lines() 56 57 if run_callback: 58 self._run_callback()
View Source
10class Checkbox(Button): 11 """A simple checkbox""" 12 13 chars = { 14 **Button.chars, 15 **{"delimiter": ["[", "]"], "checked": "X", "unchecked": " "}, 16 } 17 18 def __init__( 19 self, 20 callback: Callable[[Any], Any] | None = None, 21 checked: bool = False, 22 **attrs: Any, 23 ) -> None: 24 """Initialize object""" 25 26 unchecked = self._get_char("unchecked") 27 assert isinstance(unchecked, str) 28 29 super().__init__(unchecked, onclick=self.toggle, **attrs) 30 31 self.callback = None 32 self.checked = False 33 if self.checked != checked: 34 self.toggle(run_callback=False) 35 36 self.callback = callback 37 38 def _run_callback(self) -> None: 39 """Run the checkbox callback with the new checked flag as its argument""" 40 41 if self.callback is not None: 42 self.callback(self.checked) 43 44 def toggle(self, *_: Any, run_callback: bool = True) -> None: 45 """Toggle state""" 46 47 chars = self._get_char("checked"), self._get_char("unchecked") 48 assert isinstance(chars[0], str) and isinstance(chars[1], str) 49 50 self.checked ^= True 51 if self.checked: 52 self.label = chars[0] 53 else: 54 self.label = chars[1] 55 56 self.get_lines() 57 58 if run_callback: 59 self._run_callback()
A simple checkbox
#  
Checkbox(
callback: Optional[Callable[[Any], Any]] = None,
checked: bool = False,
**attrs: Any
)
View Source
18 def __init__( 19 self, 20 callback: Callable[[Any], Any] | None = None, 21 checked: bool = False, 22 **attrs: Any, 23 ) -> None: 24 """Initialize object""" 25 26 unchecked = self._get_char("unchecked") 27 assert isinstance(unchecked, str) 28 29 super().__init__(unchecked, onclick=self.toggle, **attrs) 30 31 self.callback = None 32 self.checked = False 33 if self.checked != checked: 34 self.toggle(run_callback=False) 35 36 self.callback = callback
Initialize object
#  
chars: dict[str, typing.Union[typing.List[str], str]] = {'delimiter': ['[', ']'], 'checked': 'X', 'unchecked': ' '}
Default characters for this class
View Source
44 def toggle(self, *_: Any, run_callback: bool = True) -> None: 45 """Toggle state""" 46 47 chars = self._get_char("checked"), self._get_char("unchecked") 48 assert isinstance(chars[0], str) and isinstance(chars[1], str) 49 50 self.checked ^= True 51 if self.checked: 52 self.label = chars[0] 53 else: 54 self.label = chars[1] 55 56 self.get_lines() 57 58 if run_callback: 59 self._run_callback()
Toggle state