ToggleButton#
A button that stays pressed when active — command-bar-style toggle.
Usage#
Basic#
bs.ToggleButton("Inactive", value=False)
bs.ToggleButton("Active", value=True)
Accent colors#
bs.ToggleButton("Primary", accent="primary", value=True)
bs.ToggleButton("Secondary", accent="secondary", value=True)
bs.ToggleButton("Info", accent="info", value=True)
bs.ToggleButton("Success", accent="success", value=True)
bs.ToggleButton("Warning", accent="warning", value=True)
bs.ToggleButton("Danger", accent="danger", value=True)
Style variants#
Use variant= to control visual weight. Each variant is shown inactive
then active so the state change is visible.
bs.ToggleButton("Solid off", accent="primary", variant="solid", value=False)
bs.ToggleButton("Solid on", accent="primary", variant="solid", value=True)
bs.ToggleButton("Outline off", accent="primary", variant="outline", value=False)
bs.ToggleButton("Outline on", accent="primary", variant="outline", value=True)
bs.ToggleButton("Ghost off", accent="primary", variant="ghost", value=False)
bs.ToggleButton("Ghost on", accent="primary", variant="ghost", value=True)
State icons#
Use on_icon= and off_icon= to display different icons for each state.
Either argument can be used alone — on_icon= alone swaps the icon on
activation without needing a separate inactive icon.
bs.ToggleButton("Favorite", on_icon="star-fill", off_icon="star",
accent="warning", value=True)
bs.ToggleButton("Favorite", on_icon="star-fill", off_icon="star",
accent="warning", value=False)
bs.ToggleButton("Pin", on_icon="pin-fill", off_icon="pin",
accent="primary", value=True)
bs.ToggleButton("Pin", on_icon="pin-fill", off_icon="pin",
accent="primary", value=False)
Icon only#
Set icon_only=True to show just the icon with no label text. Useful for
compact command bars.
bs.ToggleButton(on_icon="star-fill", off_icon="star", accent="warning", value=True, icon_only=True)
bs.ToggleButton(on_icon="star-fill", off_icon="star", accent="warning", value=False, icon_only=True)
bs.ToggleButton(on_icon="pin-fill", off_icon="pin", accent="primary", value=True, icon_only=True)
bs.ToggleButton(on_icon="heart-fill", off_icon="heart", accent="danger", value=True, icon_only=True)
bs.ToggleButton(on_icon="heart-fill", off_icon="heart", accent="danger", value=False, icon_only=True)
Compact density#
bs.ToggleButton("Compact", density="compact", value=False)
bs.ToggleButton("Compact", density="compact", value=True, accent="primary")
bs.ToggleButton(on_icon="star-fill", off_icon="star",
density="compact", accent="warning", value=True, icon_only=True)
Reactive binding#
Bind a Signal with signal=. The button and signal stay in sync.
When signal= is provided, value= is ignored — seed the Signal
directly.
bold = bs.Signal(False)
bs.ToggleButton("Bold", signal=bold, on_icon="type-bold")
bold.subscribe(lambda v: apply_bold(v))
Disabled#
bs.ToggleButton("Disabled inactive", disabled=True, value=False)
bs.ToggleButton("Disabled active", disabled=True, value=True)
Events#
btn = bs.ToggleButton("Option")
# Fires on every toggle
btn.on_change(lambda e: print("active:", btn.checked))
# Fires only when pressed/activated
btn.on_check(lambda e: print("activated"))
# Fires only when released/deactivated
btn.on_uncheck(lambda e: print("deactivated"))
# As a Stream
btn.on_change().debounce(200).listen(lambda e: save())
Programmatic control#
btn = bs.ToggleButton("Option")
btn.checked = True # activate
btn.value # → True
btn.toggle() # flip state
btn.disabled = True # lock the button
Widget sizing#
All widgets accept self-placement kwargs via **kwargs. The parent
container determines which options apply — stack-based parents use stack
kwargs, grid-based parents use grid kwargs. Unrecognised keys are
silently ignored.
Stack#
Used inside VStack, HStack, App, and other stack containers.
|
Fill direction: |
|
Grow to consume extra space in the parent. |
|
Alignment when the widget does not fill the available slot:
|
|
External spacing in pixels. Accepts an integer (equal on all
sides), a 2-tuple |
|
Horizontal external spacing (left and right). Accepts an integer
or a 2-tuple |
|
Vertical external spacing (top and bottom). Accepts an integer
or a 2-tuple |
Grid#
Used inside a Grid container.
|
Zero-based row and column indices. |
|
Number of rows or columns to span. |
|
Alignment and fill within the grid cell. Any combination of
|
|
External spacing in pixels. Accepts an integer, a 2-tuple
|
|
Horizontal external spacing. Accepts an integer or |
|
Vertical external spacing. Accepts an integer or |
API#
The complete reference for ToggleButton lives on the
Widgets API page. At a glance:
A button that stays pressed when active — toolbar-style toggle. |
Full Example#
1
2with bs.App(title="ToggleButton Demo", padding=20, gap=16) as app:
3
4 # Basic
5 bs.Label("Basic", font="heading-sm")
6 with bs.HStack(gap=8):
7 bs.ToggleButton("Inactive", value=False)
8 bs.ToggleButton("Active", value=True)
9
10 # Accent colors
11 bs.Label("Accent Colors", font="heading-sm")
12 with bs.HStack(gap=8):
13 for accent in ("default", "primary", "secondary", "info", "success", "warning", "danger"):
14 bs.ToggleButton(accent.title(), accent=accent, value=True)
15
16 # Style variants
17 bs.Label("Style Variants", font="heading-sm")
18 with bs.HStack(gap=16):
19 for variant in ("solid", "outline", "ghost"):
20 with bs.VStack(gap=4):
21 bs.ToggleButton(f"{variant.title()} — off", accent="primary", variant=variant, value=False)
22 bs.ToggleButton(f"{variant.title()} — on", accent="primary", variant=variant, value=True)
23
24 # State icons
25 bs.Label("State Icons", font="heading-sm")
26 with bs.HStack(gap=8):
27 bs.ToggleButton("Favorite",
28 on_icon="star-fill", off_icon="star",
29 accent="warning", value=True)
30 bs.ToggleButton("Favorite",
31 on_icon="star-fill", off_icon="star",
32 accent="warning", value=False)
33 bs.ToggleButton("Pin",
34 on_icon="pin-fill", off_icon="pin",
35 accent="primary", value=True)
36 bs.ToggleButton("Pin",
37 on_icon="pin-fill", off_icon="pin",
38 accent="primary", value=False)
39
40 # Icon only
41 bs.Label("Icon Only", font="heading-sm")
42 with bs.HStack(gap=8):
43 bs.ToggleButton(on_icon="star-fill", off_icon="star", accent="warning", value=True, icon_only=True)
44 bs.ToggleButton(on_icon="star-fill", off_icon="star", accent="warning", value=False, icon_only=True)
45 bs.ToggleButton(on_icon="pin-fill", off_icon="pin", accent="primary", value=True, icon_only=True)
46 bs.ToggleButton(on_icon="heart-fill", off_icon="heart", accent="danger", value=True, icon_only=True)
47 bs.ToggleButton(on_icon="heart-fill", off_icon="heart", accent="danger", value=False, icon_only=True)
48
49 # Compact density
50 bs.Label("Compact Density", font="heading-sm")
51 with bs.HStack(gap=8):
52 bs.ToggleButton("Compact", density="compact", value=False)
53 bs.ToggleButton("Compact", density="compact", value=True, accent="primary")
54 bs.ToggleButton(on_icon="star-fill", off_icon="star", density="compact",
55 accent="warning", value=True, icon_only=True)
56
57 # Disabled
58 bs.Label("Disabled", font="heading-sm")
59 with bs.HStack(gap=8):
60 bs.ToggleButton("Disabled inactive", disabled=True, value=False)
61 bs.ToggleButton("Disabled active", disabled=True, value=True)
62
63app.run()