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