Skip to main content

A full UI framework for Python desktop apps built on tkinter — rich widgets, theming, and application structure out of the box.

Project description

bootstack

Downloads Downloads

bootstack is a batteries-included desktop application framework for Python, built on Tk. It grew out of ttkbootstrap — which brought Bootstrap-style theming to ttk widgets — and bundles the layers you'd expect from a modern framework around it: app scaffolding, layout containers, semantic styling, reactive signals, forms and validation, i18n, a data layer, and a CLI for scaffolding and packaging.

The aim is to take you from pip install to a working, themed application without wiring those pieces together yourself or dropping down to raw Tk geometry calls.

Active alpha. APIs may change before the first stable release. See the documentation for guides and the API reference.

Installation

Requires Python 3.12+.

pip install bootstack

Quick Start

import bootstack as bs

app = bs.App(title="Hello bootstack", theme="bootstrap-light")

bs.Label(app, text="Hello from bootstack!").pack(pady=10)
bs.Button(app, text="Primary", accent="primary").pack(pady=5)
bs.Button(app, text="Success", accent="success").pack(pady=5)
bs.Button(app, text="Danger Outline", accent="danger", variant="outline").pack(pady=5)

app.mainloop()

For navigation-based apps, use AppShell — it gives you a toolbar, sidebar, and page stack in one call:

import bootstack as bs

shell = bs.AppShell(title="My App", size=(1000, 650))

home = shell.add_page("home", text="Home", icon="house")
bs.Label(home, text="Welcome!").pack(padx=20, pady=20)

docs = shell.add_page("docs", text="Documents", icon="file-earmark-text")
bs.Label(docs, text="Your documents.").pack(padx=20, pady=20)

shell.mainloop()

How it works

Layout containers

PackFrame and GridFrame let you describe a layout once instead of repeating geometry calls on each child:

form = bs.GridFrame(app, columns=["auto", 1], gap=(12, 6), padding=12)
form.pack(fill="both", expand=True)

form.add(bs.Label(form, text="Name"))
form.add(bs.Entry(form))
form.add(bs.Label(form, text="Email"))
form.add(bs.Entry(form))
form.add(bs.Button(form, text="Submit", accent="primary"), columnspan=2)

Semantic styling

Widgets take an accent (color intent) and variant (visual weight) instead of hard-coded colors, so the same code looks right across themes and light/dark modes:

bs.Button(app, text="Save", accent="primary")                       # solid (default)
bs.Button(app, text="Cancel", accent="secondary", variant="outline")
bs.Button(app, text="Learn more", accent="info", variant="link")
bs.Label(app, text="Heading", font="heading-lg")

Signals (optional)

Plain callbacks work fine for most things. When state needs to flow between widgets, signals give you a small subscribe/get/set primitive:

counter = bs.Signal(0)

label = bs.Label(app)
counter.subscribe(lambda v: label.configure(text=f"Count: {v}"))

bs.Button(app, text="+1", command=lambda: counter.set(counter.get() + 1))

Features

  • Application scaffoldingApp for blank windows, AppShell for toolbar + sidebar + page-stack apps, frameless windows with custom chrome
  • 60+ widgets — ttk-derived primitives plus higher-level composites (TableView, Calendar, DateEntry, Form, FloodGauge, Meter, ToggleGroup, PageStack, Toast, Tooltip, and more)
  • 9 dialogs — Message, Query, ColorChooser, ColorDropper, DateDialog, FontDialog, FilterDialog, FormDialog, plus a Dialog base
  • Layout containersPackFrame and GridFrame for declarative layouts; ScrollView, PanedWindow, Accordion, Card, Expander
  • Design system — semantic accent colors (primary, secondary, success, danger, warning, info) and variant tokens (solid, outline, ghost, link, text), consistent across widgets
  • Built-in themes — paired light/dark variants (amber, aurora, bootstrap, classic, docs, forest, ocean, rose) with runtime theme switching and a custom-theme API
  • Reactive signals — observable state with subscribe/get/set, integrates with widgets via signal= / textvariable=
  • Forms & validationForm and Field with built-in validators
  • DataSource — common interface over in-memory, SQLite, and file backends, with pagination, filtering, sorting, CRUD, and CSV export
  • Localization (i18n) — 23 bundled message catalogs, locale-aware number/date/time formatting via Babel, runtime language switching
  • Icons & images — icon handling with theme-aware recoloring, DPI scaling, and caching
  • Platform support — DPI awareness, multi-monitor centering, mica/acrylic effects on Windows
  • CLI (bootstack) — project scaffolding, run, add components, theme/i18n setup, doctor, build/package

Widget Categories

Category Widgets
Actions Button, ButtonGroup, MenuButton, DropdownButton, ContextMenu
Inputs TextEntry, PasswordEntry, PathEntry, NumericEntry, SpinnerEntry, Scale, ScrolledText, DateEntry, TimeEntry
Selection CheckButton, CheckToggle, RadioButton, RadioToggle, RadioGroup, ToggleGroup, OptionMenu, SelectBox, Calendar, Switch
Data Display Label, Badge, ListView, TreeView, TableView, Progressbar, Meter, FloodGauge
Layout Frame, PackFrame, GridFrame, LabelFrame, PanedWindow, ScrollView, Accordion, Card, Expander, Separator, SizeGrip
Navigation AppShell, Toolbar, SideNav, Tabs, PageStack
Dialogs MessageDialog, QueryDialog, ColorChooser, ColorDropper, DateDialog, FontDialog, FilterDialog, FormDialog
Overlays Toast, Tooltip
Forms Form, Field (with validation)

CLI

bootstack ships with an optional CLI for scaffolding, running, and packaging applications:

bootstack start MyApp                       # Create a new project (basic template)
bootstack start MyApp --template appshell   # ...or with sidebar navigation
bootstack run                               # Run the app defined in the project config
bootstack add page Dashboard                # Add a new page (appshell)
bootstack add view Settings                 # Add a new view (basic)
bootstack add dialog Preferences            # Add a new dialog
bootstack add theme my-brand                # Scaffold a custom theme
bootstack add i18n --languages en es fr     # Add i18n support
bootstack list themes                       # List available themes
bootstack doctor                            # Diagnose project & environment
bootstack build                             # Package for distribution

Documentation

Links

Acknowledgements

bootstack is derived from ttkbootstrap and continues that project's mission. See NOTICE for license attribution.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bootstack-0.1.0a1.tar.gz (677.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bootstack-0.1.0a1-py3-none-any.whl (927.7 kB view details)

Uploaded Python 3

File details

Details for the file bootstack-0.1.0a1.tar.gz.

File metadata

  • Download URL: bootstack-0.1.0a1.tar.gz
  • Upload date:
  • Size: 677.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for bootstack-0.1.0a1.tar.gz
Algorithm Hash digest
SHA256 3b83e7e2b8399c2bc661fc8a6d9014924a5959f2041f6b62a6b032dcac3edd3c
MD5 430e00d0787dd7b6e545d2c29b1650cf
BLAKE2b-256 3f67cd0a621ac1f5685ff7b540bb56e2bbbfa3f94f9769ed097a16336d15d71f

See more details on using hashes here.

File details

Details for the file bootstack-0.1.0a1-py3-none-any.whl.

File metadata

  • Download URL: bootstack-0.1.0a1-py3-none-any.whl
  • Upload date:
  • Size: 927.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for bootstack-0.1.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 81616aa5e1d60b7813435b0f8378a851c5414160c30ea18ae7d8f7bdd3203748
MD5 c9579c6ad2c9e23aa0f18fbfe9af5a6e
BLAKE2b-256 2f8fb9e3710165e4cf6daf0764b3591bfc352a332e91de834a0b8a1b58538b94

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page