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

#   def toggle(self, *_: Any, run_callback: bool = True) -> None:
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