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()
class Checkbox(pytermgui.widgets.button.Button):
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