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