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