bootstack 0.1.0a1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bootstack-0.1.0a1/LICENSE +22 -0
- bootstack-0.1.0a1/MANIFEST.in +6 -0
- bootstack-0.1.0a1/NOTICE +10 -0
- bootstack-0.1.0a1/PKG-INFO +196 -0
- bootstack-0.1.0a1/README.md +162 -0
- bootstack-0.1.0a1/pyproject.toml +82 -0
- bootstack-0.1.0a1/setup.cfg +4 -0
- bootstack-0.1.0a1/src/bootstack/__init__.py +249 -0
- bootstack-0.1.0a1/src/bootstack/__main__.py +5 -0
- bootstack-0.1.0a1/src/bootstack/api/__init__.py +127 -0
- bootstack-0.1.0a1/src/bootstack/api/app.py +30 -0
- bootstack-0.1.0a1/src/bootstack/api/constants.py +3 -0
- bootstack-0.1.0a1/src/bootstack/api/data.py +23 -0
- bootstack-0.1.0a1/src/bootstack/api/dialogs.py +44 -0
- bootstack-0.1.0a1/src/bootstack/api/i18n.py +17 -0
- bootstack-0.1.0a1/src/bootstack/api/localization.py +16 -0
- bootstack-0.1.0a1/src/bootstack/api/menu.py +7 -0
- bootstack-0.1.0a1/src/bootstack/api/style.py +23 -0
- bootstack-0.1.0a1/src/bootstack/api/utils.py +24 -0
- bootstack-0.1.0a1/src/bootstack/api/widgets.py +137 -0
- bootstack-0.1.0a1/src/bootstack/assets/__init__.py +24 -0
- bootstack-0.1.0a1/src/bootstack/assets/bootstack-transparent.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/bootstack.ico +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/bootstack.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/__init__.py +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/badge-pill.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/badge-square.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/border.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-compact.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-group-horizontal-after-compact.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-group-horizontal-after-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-group-horizontal-before-compact.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-group-horizontal-before-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-group-horizontal-center-compact.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-group-horizontal-center-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-group-vertical-after-compact.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-group-vertical-after-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-group-vertical-before-compact.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-group-vertical-before-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-group-vertical-center-compact.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/button-group-vertical-center-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/checkbox-checked.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/checkbox-indeterminate.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/checkbox-unchecked.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/field.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/input-after-compact.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/input-after-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/input-before-compact.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/input-before-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/input-compact.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/input-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/list-item-separated.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/list-item.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/manifest.toml +480 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/menu-item.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/nav-button-compact.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/nav-button-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/nav-icon-button-compact.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/nav-icon-button-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/notebook-client-border.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/notebook-tab-active.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/notebook-tab-bar.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/notebook-tab-normal.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/notebook-tab-pill.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/progress-bar-horizontal-striped.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/progress-bar-solid.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/progress-bar-thin.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/progress-bar-vertical-striped.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/radio-selected.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/radio-unselected.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/scrollbar-horizontal.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/scrollbar-vertical.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/slider-handle-focus.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/slider-handle.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/slider-track-horizontal.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/slider-track-vertical.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/switch-off.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/switch-on.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/tabs-bar-horizontal.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/tabs-bar-vertical.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/elements/tabs-pill.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +853 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +875 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +853 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +853 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +853 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +875 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +853 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +853 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +851 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +841 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +914 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +841 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +841 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +842 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/__init__.py +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/amber-dark.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/amber-light.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/aurora-dark.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/aurora-light.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/bootstrap-dark.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/bootstrap-light.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/classic-dark.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/classic-light.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/docs-dark.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/docs-light.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/forest-dark.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/forest-light.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/ocean-dark.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/ocean-light.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/rose-dark.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/themes/rose-light.json +32 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/__init__.py +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/badge-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/badge-pill.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/border.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/button-group-horizontal-after.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/button-group-horizontal-before.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/button-group-horizontal-center.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/button-group-vertical-after.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/button-group-vertical-before.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/button-group-vertical-center.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/button.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/checkbox-checked.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/checkbox-indeterminate.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/checkbox-unchecked.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/field.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/icon-button.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/input-inner.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/input-prefix.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/input-suffix.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/input.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/list-item-focus.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/list-item-separated.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/menu-item-separated.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/notebook-client-border.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/notebook-pill-active.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/notebook-pill-inactive.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/notebook-tab-active.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/notebook-tab-border.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/notebook-tab-normal.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/notebook-underline.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/progress-bar-horizontal-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/progress-bar-horizontal-striped.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/progress-bar-vertical-default.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/progress-bar-vertical-striped.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/progress-trough-horizontal.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/progress-trough-vertical.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/radio-selected.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/radio-unselected.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/scrollbar-horizontal-rounded.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/scrollbar-vertical-rounded.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/separator-horizontal.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/separator-vertical.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/slider-handle-focus.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/slider-handle.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/slider-track-horizontal.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/slider-track-vertical.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/switch-off.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/switch-on.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/tabs-bar-horizontal.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/tabs-bar-vertical.png +0 -0
- bootstack-0.1.0a1/src/bootstack/assets/widgets/tabs-pill.png +0 -0
- bootstack-0.1.0a1/src/bootstack/cli/__init__.py +124 -0
- bootstack-0.1.0a1/src/bootstack/cli/__main__.py +6 -0
- bootstack-0.1.0a1/src/bootstack/cli/add.py +439 -0
- bootstack-0.1.0a1/src/bootstack/cli/build.py +115 -0
- bootstack-0.1.0a1/src/bootstack/cli/config.py +287 -0
- bootstack-0.1.0a1/src/bootstack/cli/demo.py +1267 -0
- bootstack-0.1.0a1/src/bootstack/cli/doctor.py +195 -0
- bootstack-0.1.0a1/src/bootstack/cli/list_cmd.py +71 -0
- bootstack-0.1.0a1/src/bootstack/cli/promote.py +120 -0
- bootstack-0.1.0a1/src/bootstack/cli/pyinstaller.py +246 -0
- bootstack-0.1.0a1/src/bootstack/cli/run.py +99 -0
- bootstack-0.1.0a1/src/bootstack/cli/start.py +105 -0
- bootstack-0.1.0a1/src/bootstack/cli/templates/__init__.py +861 -0
- bootstack-0.1.0a1/src/bootstack/constants.py +325 -0
- bootstack-0.1.0a1/src/bootstack/core/__init__.py +34 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/__init__.py +45 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/after.py +103 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/bind.py +154 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/bindtags.py +112 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/busy.py +61 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/clipboard.py +88 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/focus.py +118 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/grab.py +65 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/grid.py +188 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/localization.py +231 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/pack.py +119 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/place.py +92 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/selection.py +136 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/signals.py +242 -0
- bootstack-0.1.0a1/src/bootstack/core/capabilities/winfo.py +315 -0
- bootstack-0.1.0a1/src/bootstack/core/colorutils.py +234 -0
- bootstack-0.1.0a1/src/bootstack/core/exceptions.py +95 -0
- bootstack-0.1.0a1/src/bootstack/core/images.py +283 -0
- bootstack-0.1.0a1/src/bootstack/core/localization/README.md +90 -0
- bootstack-0.1.0a1/src/bootstack/core/localization/__init__.py +13 -0
- bootstack-0.1.0a1/src/bootstack/core/localization/intl_format.py +580 -0
- bootstack-0.1.0a1/src/bootstack/core/localization/msgcat.py +425 -0
- bootstack-0.1.0a1/src/bootstack/core/localization/specs.py +143 -0
- bootstack-0.1.0a1/src/bootstack/core/mixins/__init__.py +1 -0
- bootstack-0.1.0a1/src/bootstack/core/mixins/ttk_state.py +35 -0
- bootstack-0.1.0a1/src/bootstack/core/mixins/widget.py +132 -0
- bootstack-0.1.0a1/src/bootstack/core/publisher.py +147 -0
- bootstack-0.1.0a1/src/bootstack/core/signals/README.md +112 -0
- bootstack-0.1.0a1/src/bootstack/core/signals/__init__.py +8 -0
- bootstack-0.1.0a1/src/bootstack/core/signals/integration.py +100 -0
- bootstack-0.1.0a1/src/bootstack/core/signals/signal.py +317 -0
- bootstack-0.1.0a1/src/bootstack/core/signals/types.py +4 -0
- bootstack-0.1.0a1/src/bootstack/core/validation/__init__.py +5 -0
- bootstack-0.1.0a1/src/bootstack/core/validation/types.py +13 -0
- bootstack-0.1.0a1/src/bootstack/core/validation/validation_result.py +17 -0
- bootstack-0.1.0a1/src/bootstack/core/validation/validation_rules.py +112 -0
- bootstack-0.1.0a1/src/bootstack/core/variables.py +62 -0
- bootstack-0.1.0a1/src/bootstack/datasource/README.md +607 -0
- bootstack-0.1.0a1/src/bootstack/datasource/__init__.py +51 -0
- bootstack-0.1.0a1/src/bootstack/datasource/base.py +474 -0
- bootstack-0.1.0a1/src/bootstack/datasource/file_source.py +541 -0
- bootstack-0.1.0a1/src/bootstack/datasource/memory_source.py +482 -0
- bootstack-0.1.0a1/src/bootstack/datasource/sqlite_source.py +453 -0
- bootstack-0.1.0a1/src/bootstack/datasource/types.py +259 -0
- bootstack-0.1.0a1/src/bootstack/dialogs/__init__.py +56 -0
- bootstack-0.1.0a1/src/bootstack/dialogs/colorchooser.py +674 -0
- bootstack-0.1.0a1/src/bootstack/dialogs/colordropper.py +257 -0
- bootstack-0.1.0a1/src/bootstack/dialogs/datedialog.py +404 -0
- bootstack-0.1.0a1/src/bootstack/dialogs/dialog.py +514 -0
- bootstack-0.1.0a1/src/bootstack/dialogs/filterdialog.py +358 -0
- bootstack-0.1.0a1/src/bootstack/dialogs/fontdialog.py +339 -0
- bootstack-0.1.0a1/src/bootstack/dialogs/formdialog.py +541 -0
- bootstack-0.1.0a1/src/bootstack/dialogs/message.py +489 -0
- bootstack-0.1.0a1/src/bootstack/dialogs/query.py +561 -0
- bootstack-0.1.0a1/src/bootstack/py.typed +1 -0
- bootstack-0.1.0a1/src/bootstack/runtime/__init__.py +3 -0
- bootstack-0.1.0a1/src/bootstack/runtime/app.py +879 -0
- bootstack-0.1.0a1/src/bootstack/runtime/base_window.py +786 -0
- bootstack-0.1.0a1/src/bootstack/runtime/events.py +399 -0
- bootstack-0.1.0a1/src/bootstack/runtime/menu.py +510 -0
- bootstack-0.1.0a1/src/bootstack/runtime/shortcuts.py +423 -0
- bootstack-0.1.0a1/src/bootstack/runtime/tk_patch.py +31 -0
- bootstack-0.1.0a1/src/bootstack/runtime/toplevel.py +131 -0
- bootstack-0.1.0a1/src/bootstack/runtime/utility.py +371 -0
- bootstack-0.1.0a1/src/bootstack/runtime/visual_focus.py +228 -0
- bootstack-0.1.0a1/src/bootstack/runtime/window_utilities.py +1043 -0
- bootstack-0.1.0a1/src/bootstack/style/__init__.py +5498 -0
- bootstack-0.1.0a1/src/bootstack/style/bootstyle.py +507 -0
- bootstack-0.1.0a1/src/bootstack/style/bootstyle_builder_base.py +752 -0
- bootstack-0.1.0a1/src/bootstack/style/bootstyle_builder_mixed.py +93 -0
- bootstack-0.1.0a1/src/bootstack/style/bootstyle_builder_tk.py +109 -0
- bootstack-0.1.0a1/src/bootstack/style/bootstyle_builder_ttk.py +354 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/__init__.py +51 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/badge.py +44 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/button.py +453 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/buttongroup.py +344 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/calendar.py +271 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/checkbutton.py +95 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/combobox.py +112 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/contextmenu.py +268 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/entry.py +83 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/expander.py +171 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/field.py +312 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/frame.py +27 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/label.py +28 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/labelframe.py +41 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/listview.py +267 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/menubar.py +74 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/menubutton.py +408 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/notebook.py +316 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/panedwindow.py +25 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/progressbar.py +71 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/radiobutton.py +68 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/scale.py +66 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/scrollbar.py +360 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/separator.py +45 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/sidenav.py +313 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/sizegrip.py +15 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/spinbox.py +119 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/switch.py +67 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/tabitem.py +205 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/toolbutton.py +260 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/tooltip.py +26 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/treeview.py +269 -0
- bootstack-0.1.0a1/src/bootstack/style/builders/utils.py +404 -0
- bootstack-0.1.0a1/src/bootstack/style/builders_tk/__init__.py +16 -0
- bootstack-0.1.0a1/src/bootstack/style/builders_tk/defaults.py +229 -0
- bootstack-0.1.0a1/src/bootstack/style/element.py +173 -0
- bootstack-0.1.0a1/src/bootstack/style/style.py +499 -0
- bootstack-0.1.0a1/src/bootstack/style/theme_provider.py +449 -0
- bootstack-0.1.0a1/src/bootstack/style/tk_patch.py +5 -0
- bootstack-0.1.0a1/src/bootstack/style/token_maps.py +42 -0
- bootstack-0.1.0a1/src/bootstack/style/types.py +32 -0
- bootstack-0.1.0a1/src/bootstack/style/typography.py +527 -0
- bootstack-0.1.0a1/src/bootstack/style/utility.py +696 -0
- bootstack-0.1.0a1/src/bootstack/themes/__init__.py +12 -0
- bootstack-0.1.0a1/src/bootstack/themes/standard.py +415 -0
- bootstack-0.1.0a1/src/bootstack/themes/user.py +45 -0
- bootstack-0.1.0a1/src/bootstack/widgets/__init__.py +53 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/__init__.py +38 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/accordion.py +385 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/appshell.py +445 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/buttongroup.py +391 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/calendar.py +914 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/compositeframe.py +282 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/contextmenu.py +1754 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/dateentry.py +261 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/dropdownbutton.py +190 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/expander.py +508 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/field.py +448 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/floodgauge.py +434 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/form.py +983 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/labeledscale.py +209 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/list/__init__.py +15 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/list/listitem.py +733 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/list/listview.py +1507 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/menubar.py +303 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/meter.py +882 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/numericentry.py +183 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/pagestack.py +330 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/passwordentry.py +149 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/pathentry.py +223 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/radiogroup.py +466 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/scrolledtext.py +388 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/scrolledtext.pyi +186 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/scrollview.py +675 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/selectbox.py +544 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/sidenav/__init__.py +24 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/sidenav/group.py +485 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/sidenav/header.py +83 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/sidenav/item.py +413 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/sidenav/separator.py +51 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/sidenav/view.py +919 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/spinnerentry.py +232 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/tableview/__init__.py +5 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/tableview/tableview.py +2254 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/tableview/types.py +169 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/tabs/__init__.py +6 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/tabs/tabitem.py +372 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/tabs/tabs.py +478 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/tabs/tabview.py +352 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/textentry.py +90 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/timeentry.py +189 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/toast.py +364 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/togglegroup.py +382 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/toolbar.py +393 -0
- bootstack-0.1.0a1/src/bootstack/widgets/composites/tooltip.py +404 -0
- bootstack-0.1.0a1/src/bootstack/widgets/internal/__init__.py +0 -0
- bootstack-0.1.0a1/src/bootstack/widgets/internal/wrapper_base.py +304 -0
- bootstack-0.1.0a1/src/bootstack/widgets/mixins/__init__.py +25 -0
- bootstack-0.1.0a1/src/bootstack/widgets/mixins/configure_mixin.py +186 -0
- bootstack-0.1.0a1/src/bootstack/widgets/mixins/entry_mixin.py +70 -0
- bootstack-0.1.0a1/src/bootstack/widgets/mixins/font_mixin.py +346 -0
- bootstack-0.1.0a1/src/bootstack/widgets/mixins/icon_mixin.py +38 -0
- bootstack-0.1.0a1/src/bootstack/widgets/mixins/localization_mixin.py +255 -0
- bootstack-0.1.0a1/src/bootstack/widgets/mixins/signal_mixin.py +272 -0
- bootstack-0.1.0a1/src/bootstack/widgets/mixins/validation_mixin.py +204 -0
- bootstack-0.1.0a1/src/bootstack/widgets/parts/__init__.py +11 -0
- bootstack-0.1.0a1/src/bootstack/widgets/parts/numberentry_part.py +345 -0
- bootstack-0.1.0a1/src/bootstack/widgets/parts/spinnerentry_part.py +394 -0
- bootstack-0.1.0a1/src/bootstack/widgets/parts/textentry_part.py +344 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/__init__.py +55 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/badge.py +44 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/button.py +89 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/card.py +66 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/checkbutton.py +124 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/checktoggle.py +53 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/combobox.py +165 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/entry.py +98 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/frame.py +206 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/gridframe.py +479 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/label.py +95 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/labelframe.py +63 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/menubutton.py +118 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/notebook.py +551 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/optionmenu.py +248 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/packframe.py +228 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/panedwindow.py +58 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/progressbar.py +95 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/radiobutton.py +115 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/radiotoggle.py +50 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/scale.py +85 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/scrollbar.py +56 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/separator.py +56 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/sizegrip.py +47 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/spinbox.py +91 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/switch.py +41 -0
- bootstack-0.1.0a1/src/bootstack/widgets/primitives/treeview.py +77 -0
- bootstack-0.1.0a1/src/bootstack/widgets/types.py +20 -0
- bootstack-0.1.0a1/src/bootstack.egg-info/PKG-INFO +196 -0
- bootstack-0.1.0a1/src/bootstack.egg-info/SOURCES.txt +425 -0
- bootstack-0.1.0a1/src/bootstack.egg-info/dependency_links.txt +1 -0
- bootstack-0.1.0a1/src/bootstack.egg-info/entry_points.txt +2 -0
- bootstack-0.1.0a1/src/bootstack.egg-info/requires.txt +11 -0
- bootstack-0.1.0a1/src/bootstack.egg-info/top_level.txt +1 -0
- bootstack-0.1.0a1/tests/test_togglegroup.py +147 -0
- bootstack-0.1.0a1/tests/test_variables.py +81 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 - 2026 Israel Dryer
|
|
4
|
+
Portions copyright (c) 2021 - 2026 Israel Dryer and ttkbootstrap contributors
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
bootstack-0.1.0a1/NOTICE
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
bootstack
|
|
2
|
+
Copyright (c) 2021 - 2026 Israel Dryer
|
|
3
|
+
|
|
4
|
+
This project is derived from ttkbootstrap
|
|
5
|
+
(https://github.com/israel-dryer/ttkbootstrap),
|
|
6
|
+
Copyright (c) 2021 - 2026 Israel Dryer and ttkbootstrap contributors,
|
|
7
|
+
licensed under the MIT License.
|
|
8
|
+
|
|
9
|
+
The original ttkbootstrap license and copyright notice are preserved above
|
|
10
|
+
in compliance with the MIT License terms.
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: bootstack
|
|
3
|
+
Version: 0.1.0a1
|
|
4
|
+
Summary: A full UI framework for Python desktop apps built on tkinter — rich widgets, theming, and application structure out of the box.
|
|
5
|
+
Author-email: Israel Dryer <israel.dryer@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/israel-dryer/bootstack
|
|
8
|
+
Project-URL: Documentation, https://bootstack.org/
|
|
9
|
+
Keywords: tkinter,ttk,gui,desktop,python3,ui,widgets,theming,cross-platform,modern,framework,application-framework,desktop-ui,python-gui
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Environment :: Win32 (MS Windows)
|
|
12
|
+
Classifier: Environment :: X11 Applications :: GTK
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
18
|
+
Classifier: Topic :: Software Development :: User Interfaces
|
|
19
|
+
Classifier: Operating System :: OS Independent
|
|
20
|
+
Requires-Python: >=3.12
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
License-File: NOTICE
|
|
24
|
+
Requires-Dist: pillow<=12,>=10
|
|
25
|
+
Requires-Dist: ttkbootstrap-icons>=4
|
|
26
|
+
Requires-Dist: ttkbootstrap-icons-bs>=1
|
|
27
|
+
Requires-Dist: typing-extensions>=4.10
|
|
28
|
+
Requires-Dist: Babel>=2.12
|
|
29
|
+
Requires-Dist: python-dateutil>=2.9
|
|
30
|
+
Requires-Dist: dateparser>=1.1
|
|
31
|
+
Requires-Dist: pywinstyles>=1.8; sys_platform == "win32"
|
|
32
|
+
Requires-Dist: screeninfo>=0.8
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
|
|
35
|
+

|
|
36
|
+
|
|
37
|
+

|
|
38
|
+
[](https://pepy.tech/project/bootstack)
|
|
39
|
+
[](https://pepy.tech/project/bootstack)
|
|
40
|
+

|
|
41
|
+

|
|
42
|
+

|
|
43
|
+

|
|
44
|
+

|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
**bootstack** is a batteries-included desktop application framework for Python, built on Tk. It grew out of [ttkbootstrap](https://github.com/israel-dryer/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.
|
|
48
|
+
|
|
49
|
+
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.
|
|
50
|
+
|
|
51
|
+
> **Active alpha.** APIs may change before the first stable release.
|
|
52
|
+
> See the [documentation](https://bootstack.org) for guides and the API reference.
|
|
53
|
+
|
|
54
|
+
## Installation
|
|
55
|
+
|
|
56
|
+
Requires Python 3.12+.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
pip install bootstack
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Quick Start
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
import bootstack as bs
|
|
66
|
+
|
|
67
|
+
app = bs.App(title="Hello bootstack", theme="bootstrap-light")
|
|
68
|
+
|
|
69
|
+
bs.Label(app, text="Hello from bootstack!").pack(pady=10)
|
|
70
|
+
bs.Button(app, text="Primary", accent="primary").pack(pady=5)
|
|
71
|
+
bs.Button(app, text="Success", accent="success").pack(pady=5)
|
|
72
|
+
bs.Button(app, text="Danger Outline", accent="danger", variant="outline").pack(pady=5)
|
|
73
|
+
|
|
74
|
+
app.mainloop()
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
For navigation-based apps, use `AppShell` — it gives you a toolbar, sidebar, and page stack in one call:
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
import bootstack as bs
|
|
81
|
+
|
|
82
|
+
shell = bs.AppShell(title="My App", size=(1000, 650))
|
|
83
|
+
|
|
84
|
+
home = shell.add_page("home", text="Home", icon="house")
|
|
85
|
+
bs.Label(home, text="Welcome!").pack(padx=20, pady=20)
|
|
86
|
+
|
|
87
|
+
docs = shell.add_page("docs", text="Documents", icon="file-earmark-text")
|
|
88
|
+
bs.Label(docs, text="Your documents.").pack(padx=20, pady=20)
|
|
89
|
+
|
|
90
|
+
shell.mainloop()
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## How it works
|
|
94
|
+
|
|
95
|
+
### Layout containers
|
|
96
|
+
|
|
97
|
+
`PackFrame` and `GridFrame` let you describe a layout once instead of repeating geometry calls on each child:
|
|
98
|
+
|
|
99
|
+
```python
|
|
100
|
+
form = bs.GridFrame(app, columns=["auto", 1], gap=(12, 6), padding=12)
|
|
101
|
+
form.pack(fill="both", expand=True)
|
|
102
|
+
|
|
103
|
+
form.add(bs.Label(form, text="Name"))
|
|
104
|
+
form.add(bs.Entry(form))
|
|
105
|
+
form.add(bs.Label(form, text="Email"))
|
|
106
|
+
form.add(bs.Entry(form))
|
|
107
|
+
form.add(bs.Button(form, text="Submit", accent="primary"), columnspan=2)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Semantic styling
|
|
111
|
+
|
|
112
|
+
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:
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
bs.Button(app, text="Save", accent="primary") # solid (default)
|
|
116
|
+
bs.Button(app, text="Cancel", accent="secondary", variant="outline")
|
|
117
|
+
bs.Button(app, text="Learn more", accent="info", variant="link")
|
|
118
|
+
bs.Label(app, text="Heading", font="heading-lg")
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Signals (optional)
|
|
122
|
+
|
|
123
|
+
Plain callbacks work fine for most things. When state needs to flow between widgets, signals give you a small subscribe/get/set primitive:
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
counter = bs.Signal(0)
|
|
127
|
+
|
|
128
|
+
label = bs.Label(app)
|
|
129
|
+
counter.subscribe(lambda v: label.configure(text=f"Count: {v}"))
|
|
130
|
+
|
|
131
|
+
bs.Button(app, text="+1", command=lambda: counter.set(counter.get() + 1))
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Features
|
|
135
|
+
|
|
136
|
+
- **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, frameless windows with custom chrome
|
|
137
|
+
- **60+ widgets** — ttk-derived primitives plus higher-level composites (TableView, Calendar, DateEntry, Form, FloodGauge, Meter, ToggleGroup, PageStack, Toast, Tooltip, and more)
|
|
138
|
+
- **9 dialogs** — Message, Query, ColorChooser, ColorDropper, DateDialog, FontDialog, FilterDialog, FormDialog, plus a `Dialog` base
|
|
139
|
+
- **Layout containers** — `PackFrame` and `GridFrame` for declarative layouts; `ScrollView`, `PanedWindow`, `Accordion`, `Card`, `Expander`
|
|
140
|
+
- **Design system** — semantic `accent` colors (primary, secondary, success, danger, warning, info) and `variant` tokens (solid, outline, ghost, link, text), consistent across widgets
|
|
141
|
+
- **Built-in themes** — paired light/dark variants (amber, aurora, bootstrap, classic, docs, forest, ocean, rose) with runtime theme switching and a custom-theme API
|
|
142
|
+
- **Reactive signals** — observable state with subscribe/get/set, integrates with widgets via `signal=` / `textvariable=`
|
|
143
|
+
- **Forms & validation** — `Form` and `Field` with built-in validators
|
|
144
|
+
- **DataSource** — common interface over in-memory, SQLite, and file backends, with pagination, filtering, sorting, CRUD, and CSV export
|
|
145
|
+
- **Localization (i18n)** — 23 bundled message catalogs, locale-aware number/date/time formatting via Babel, runtime language switching
|
|
146
|
+
- **Icons & images** — icon handling with theme-aware recoloring, DPI scaling, and caching
|
|
147
|
+
- **Platform support** — DPI awareness, multi-monitor centering, mica/acrylic effects on Windows
|
|
148
|
+
- **CLI (`bootstack`)** — project scaffolding, run, add components, theme/i18n setup, doctor, build/package
|
|
149
|
+
|
|
150
|
+
## Widget Categories
|
|
151
|
+
|
|
152
|
+
| Category | Widgets |
|
|
153
|
+
|----------|---------|
|
|
154
|
+
| **Actions** | Button, ButtonGroup, MenuButton, DropdownButton, ContextMenu |
|
|
155
|
+
| **Inputs** | TextEntry, PasswordEntry, PathEntry, NumericEntry, SpinnerEntry, Scale, ScrolledText, DateEntry, TimeEntry |
|
|
156
|
+
| **Selection** | CheckButton, CheckToggle, RadioButton, RadioToggle, RadioGroup, ToggleGroup, OptionMenu, SelectBox, Calendar, Switch |
|
|
157
|
+
| **Data Display** | Label, Badge, ListView, TreeView, TableView, Progressbar, Meter, FloodGauge |
|
|
158
|
+
| **Layout** | Frame, PackFrame, GridFrame, LabelFrame, PanedWindow, ScrollView, Accordion, Card, Expander, Separator, SizeGrip |
|
|
159
|
+
| **Navigation** | AppShell, Toolbar, SideNav, Tabs, PageStack |
|
|
160
|
+
| **Dialogs** | MessageDialog, QueryDialog, ColorChooser, ColorDropper, DateDialog, FontDialog, FilterDialog, FormDialog |
|
|
161
|
+
| **Overlays** | Toast, Tooltip |
|
|
162
|
+
| **Forms** | Form, Field (with validation) |
|
|
163
|
+
|
|
164
|
+
## CLI
|
|
165
|
+
|
|
166
|
+
bootstack ships with an optional CLI for scaffolding, running, and packaging applications:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
bootstack start MyApp # Create a new project (basic template)
|
|
170
|
+
bootstack start MyApp --template appshell # ...or with sidebar navigation
|
|
171
|
+
bootstack run # Run the app defined in the project config
|
|
172
|
+
bootstack add page Dashboard # Add a new page (appshell)
|
|
173
|
+
bootstack add view Settings # Add a new view (basic)
|
|
174
|
+
bootstack add dialog Preferences # Add a new dialog
|
|
175
|
+
bootstack add theme my-brand # Scaffold a custom theme
|
|
176
|
+
bootstack add i18n --languages en es fr # Add i18n support
|
|
177
|
+
bootstack list themes # List available themes
|
|
178
|
+
bootstack doctor # Diagnose project & environment
|
|
179
|
+
bootstack build # Package for distribution
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Documentation
|
|
183
|
+
|
|
184
|
+
- **Documentation**: https://bootstack.org
|
|
185
|
+
- **Getting Started**: https://bootstack.org/getting-started/
|
|
186
|
+
- **Guides**: https://bootstack.org/guides/
|
|
187
|
+
- **Widgets**: https://bootstack.org/widgets/
|
|
188
|
+
|
|
189
|
+
## Links
|
|
190
|
+
|
|
191
|
+
- **GitHub**: https://github.com/israel-dryer/bootstack
|
|
192
|
+
- **Icons**: https://github.com/israel-dryer/ttkbootstrap-icons
|
|
193
|
+
|
|
194
|
+
## Acknowledgements
|
|
195
|
+
|
|
196
|
+
bootstack is derived from [ttkbootstrap](https://github.com/israel-dryer/ttkbootstrap) and continues that project's mission. See [`NOTICE`](NOTICE) for license attribution.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
[](https://pepy.tech/project/bootstack)
|
|
5
|
+
[](https://pepy.tech/project/bootstack)
|
|
6
|
+

|
|
7
|
+

|
|
8
|
+

|
|
9
|
+

|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
**bootstack** is a batteries-included desktop application framework for Python, built on Tk. It grew out of [ttkbootstrap](https://github.com/israel-dryer/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.
|
|
14
|
+
|
|
15
|
+
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.
|
|
16
|
+
|
|
17
|
+
> **Active alpha.** APIs may change before the first stable release.
|
|
18
|
+
> See the [documentation](https://bootstack.org) for guides and the API reference.
|
|
19
|
+
|
|
20
|
+
## Installation
|
|
21
|
+
|
|
22
|
+
Requires Python 3.12+.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
pip install bootstack
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Quick Start
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
import bootstack as bs
|
|
32
|
+
|
|
33
|
+
app = bs.App(title="Hello bootstack", theme="bootstrap-light")
|
|
34
|
+
|
|
35
|
+
bs.Label(app, text="Hello from bootstack!").pack(pady=10)
|
|
36
|
+
bs.Button(app, text="Primary", accent="primary").pack(pady=5)
|
|
37
|
+
bs.Button(app, text="Success", accent="success").pack(pady=5)
|
|
38
|
+
bs.Button(app, text="Danger Outline", accent="danger", variant="outline").pack(pady=5)
|
|
39
|
+
|
|
40
|
+
app.mainloop()
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
For navigation-based apps, use `AppShell` — it gives you a toolbar, sidebar, and page stack in one call:
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
import bootstack as bs
|
|
47
|
+
|
|
48
|
+
shell = bs.AppShell(title="My App", size=(1000, 650))
|
|
49
|
+
|
|
50
|
+
home = shell.add_page("home", text="Home", icon="house")
|
|
51
|
+
bs.Label(home, text="Welcome!").pack(padx=20, pady=20)
|
|
52
|
+
|
|
53
|
+
docs = shell.add_page("docs", text="Documents", icon="file-earmark-text")
|
|
54
|
+
bs.Label(docs, text="Your documents.").pack(padx=20, pady=20)
|
|
55
|
+
|
|
56
|
+
shell.mainloop()
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## How it works
|
|
60
|
+
|
|
61
|
+
### Layout containers
|
|
62
|
+
|
|
63
|
+
`PackFrame` and `GridFrame` let you describe a layout once instead of repeating geometry calls on each child:
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
form = bs.GridFrame(app, columns=["auto", 1], gap=(12, 6), padding=12)
|
|
67
|
+
form.pack(fill="both", expand=True)
|
|
68
|
+
|
|
69
|
+
form.add(bs.Label(form, text="Name"))
|
|
70
|
+
form.add(bs.Entry(form))
|
|
71
|
+
form.add(bs.Label(form, text="Email"))
|
|
72
|
+
form.add(bs.Entry(form))
|
|
73
|
+
form.add(bs.Button(form, text="Submit", accent="primary"), columnspan=2)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Semantic styling
|
|
77
|
+
|
|
78
|
+
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:
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
bs.Button(app, text="Save", accent="primary") # solid (default)
|
|
82
|
+
bs.Button(app, text="Cancel", accent="secondary", variant="outline")
|
|
83
|
+
bs.Button(app, text="Learn more", accent="info", variant="link")
|
|
84
|
+
bs.Label(app, text="Heading", font="heading-lg")
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Signals (optional)
|
|
88
|
+
|
|
89
|
+
Plain callbacks work fine for most things. When state needs to flow between widgets, signals give you a small subscribe/get/set primitive:
|
|
90
|
+
|
|
91
|
+
```python
|
|
92
|
+
counter = bs.Signal(0)
|
|
93
|
+
|
|
94
|
+
label = bs.Label(app)
|
|
95
|
+
counter.subscribe(lambda v: label.configure(text=f"Count: {v}"))
|
|
96
|
+
|
|
97
|
+
bs.Button(app, text="+1", command=lambda: counter.set(counter.get() + 1))
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Features
|
|
101
|
+
|
|
102
|
+
- **Application scaffolding** — `App` for blank windows, `AppShell` for toolbar + sidebar + page-stack apps, frameless windows with custom chrome
|
|
103
|
+
- **60+ widgets** — ttk-derived primitives plus higher-level composites (TableView, Calendar, DateEntry, Form, FloodGauge, Meter, ToggleGroup, PageStack, Toast, Tooltip, and more)
|
|
104
|
+
- **9 dialogs** — Message, Query, ColorChooser, ColorDropper, DateDialog, FontDialog, FilterDialog, FormDialog, plus a `Dialog` base
|
|
105
|
+
- **Layout containers** — `PackFrame` and `GridFrame` for declarative layouts; `ScrollView`, `PanedWindow`, `Accordion`, `Card`, `Expander`
|
|
106
|
+
- **Design system** — semantic `accent` colors (primary, secondary, success, danger, warning, info) and `variant` tokens (solid, outline, ghost, link, text), consistent across widgets
|
|
107
|
+
- **Built-in themes** — paired light/dark variants (amber, aurora, bootstrap, classic, docs, forest, ocean, rose) with runtime theme switching and a custom-theme API
|
|
108
|
+
- **Reactive signals** — observable state with subscribe/get/set, integrates with widgets via `signal=` / `textvariable=`
|
|
109
|
+
- **Forms & validation** — `Form` and `Field` with built-in validators
|
|
110
|
+
- **DataSource** — common interface over in-memory, SQLite, and file backends, with pagination, filtering, sorting, CRUD, and CSV export
|
|
111
|
+
- **Localization (i18n)** — 23 bundled message catalogs, locale-aware number/date/time formatting via Babel, runtime language switching
|
|
112
|
+
- **Icons & images** — icon handling with theme-aware recoloring, DPI scaling, and caching
|
|
113
|
+
- **Platform support** — DPI awareness, multi-monitor centering, mica/acrylic effects on Windows
|
|
114
|
+
- **CLI (`bootstack`)** — project scaffolding, run, add components, theme/i18n setup, doctor, build/package
|
|
115
|
+
|
|
116
|
+
## Widget Categories
|
|
117
|
+
|
|
118
|
+
| Category | Widgets |
|
|
119
|
+
|----------|---------|
|
|
120
|
+
| **Actions** | Button, ButtonGroup, MenuButton, DropdownButton, ContextMenu |
|
|
121
|
+
| **Inputs** | TextEntry, PasswordEntry, PathEntry, NumericEntry, SpinnerEntry, Scale, ScrolledText, DateEntry, TimeEntry |
|
|
122
|
+
| **Selection** | CheckButton, CheckToggle, RadioButton, RadioToggle, RadioGroup, ToggleGroup, OptionMenu, SelectBox, Calendar, Switch |
|
|
123
|
+
| **Data Display** | Label, Badge, ListView, TreeView, TableView, Progressbar, Meter, FloodGauge |
|
|
124
|
+
| **Layout** | Frame, PackFrame, GridFrame, LabelFrame, PanedWindow, ScrollView, Accordion, Card, Expander, Separator, SizeGrip |
|
|
125
|
+
| **Navigation** | AppShell, Toolbar, SideNav, Tabs, PageStack |
|
|
126
|
+
| **Dialogs** | MessageDialog, QueryDialog, ColorChooser, ColorDropper, DateDialog, FontDialog, FilterDialog, FormDialog |
|
|
127
|
+
| **Overlays** | Toast, Tooltip |
|
|
128
|
+
| **Forms** | Form, Field (with validation) |
|
|
129
|
+
|
|
130
|
+
## CLI
|
|
131
|
+
|
|
132
|
+
bootstack ships with an optional CLI for scaffolding, running, and packaging applications:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
bootstack start MyApp # Create a new project (basic template)
|
|
136
|
+
bootstack start MyApp --template appshell # ...or with sidebar navigation
|
|
137
|
+
bootstack run # Run the app defined in the project config
|
|
138
|
+
bootstack add page Dashboard # Add a new page (appshell)
|
|
139
|
+
bootstack add view Settings # Add a new view (basic)
|
|
140
|
+
bootstack add dialog Preferences # Add a new dialog
|
|
141
|
+
bootstack add theme my-brand # Scaffold a custom theme
|
|
142
|
+
bootstack add i18n --languages en es fr # Add i18n support
|
|
143
|
+
bootstack list themes # List available themes
|
|
144
|
+
bootstack doctor # Diagnose project & environment
|
|
145
|
+
bootstack build # Package for distribution
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Documentation
|
|
149
|
+
|
|
150
|
+
- **Documentation**: https://bootstack.org
|
|
151
|
+
- **Getting Started**: https://bootstack.org/getting-started/
|
|
152
|
+
- **Guides**: https://bootstack.org/guides/
|
|
153
|
+
- **Widgets**: https://bootstack.org/widgets/
|
|
154
|
+
|
|
155
|
+
## Links
|
|
156
|
+
|
|
157
|
+
- **GitHub**: https://github.com/israel-dryer/bootstack
|
|
158
|
+
- **Icons**: https://github.com/israel-dryer/ttkbootstrap-icons
|
|
159
|
+
|
|
160
|
+
## Acknowledgements
|
|
161
|
+
|
|
162
|
+
bootstack is derived from [ttkbootstrap](https://github.com/israel-dryer/ttkbootstrap) and continues that project's mission. See [`NOTICE`](NOTICE) for license attribution.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "bootstack"
|
|
7
|
+
version = "0.1.0a1"
|
|
8
|
+
description = "A full UI framework for Python desktop apps built on tkinter — rich widgets, theming, and application structure out of the box."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "Israel Dryer", email = "israel.dryer@gmail.com" }
|
|
14
|
+
]
|
|
15
|
+
keywords = [
|
|
16
|
+
"tkinter",
|
|
17
|
+
"ttk",
|
|
18
|
+
"gui",
|
|
19
|
+
"desktop",
|
|
20
|
+
"python3",
|
|
21
|
+
"ui",
|
|
22
|
+
"widgets",
|
|
23
|
+
"theming",
|
|
24
|
+
"cross-platform",
|
|
25
|
+
"modern",
|
|
26
|
+
"framework",
|
|
27
|
+
"application-framework",
|
|
28
|
+
"desktop-ui",
|
|
29
|
+
"python-gui"
|
|
30
|
+
]
|
|
31
|
+
classifiers = [
|
|
32
|
+
"Development Status :: 3 - Alpha",
|
|
33
|
+
"Environment :: Win32 (MS Windows)",
|
|
34
|
+
"Environment :: X11 Applications :: GTK",
|
|
35
|
+
"Intended Audience :: Developers",
|
|
36
|
+
"Programming Language :: Python :: 3",
|
|
37
|
+
"Programming Language :: Python :: 3.12",
|
|
38
|
+
"Programming Language :: Python :: 3.13",
|
|
39
|
+
"Programming Language :: Python :: 3.14",
|
|
40
|
+
"Topic :: Software Development :: User Interfaces",
|
|
41
|
+
"Operating System :: OS Independent",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
dependencies = [
|
|
45
|
+
"pillow>=10,<=12",
|
|
46
|
+
"ttkbootstrap-icons>=4",
|
|
47
|
+
"ttkbootstrap-icons-bs>=1",
|
|
48
|
+
|
|
49
|
+
# Backported typing primitives (Self, Unpack, ParamSpec, etc.)
|
|
50
|
+
"typing-extensions>=4.10",
|
|
51
|
+
|
|
52
|
+
# Runtime localization/formatting stack
|
|
53
|
+
"Babel>=2.12",
|
|
54
|
+
"python-dateutil>=2.9",
|
|
55
|
+
"dateparser>=1.1",
|
|
56
|
+
|
|
57
|
+
# Windows-specific: modern window effects (mica, acrylic, etc.)
|
|
58
|
+
"pywinstyles>=1.8; sys_platform == 'win32'",
|
|
59
|
+
|
|
60
|
+
# Multi-monitor support for proper window centering
|
|
61
|
+
"screeninfo>=0.8",
|
|
62
|
+
]
|
|
63
|
+
|
|
64
|
+
[project.optional-dependencies]
|
|
65
|
+
|
|
66
|
+
[project.urls]
|
|
67
|
+
Homepage = "https://github.com/israel-dryer/bootstack"
|
|
68
|
+
Documentation = "https://bootstack.org/"
|
|
69
|
+
|
|
70
|
+
[project.scripts]
|
|
71
|
+
bootstack = "bootstack.cli:main"
|
|
72
|
+
|
|
73
|
+
[tool.setuptools.packages.find]
|
|
74
|
+
where = ["src"]
|
|
75
|
+
|
|
76
|
+
[tool.setuptools.package-data]
|
|
77
|
+
"bootstack" = [
|
|
78
|
+
"themes/*.json",
|
|
79
|
+
"assets/*",
|
|
80
|
+
# ship compiled gettext catalogs within the package
|
|
81
|
+
"assets/locales/**/LC_MESSAGES/*.mo",
|
|
82
|
+
]
|