bootstack 0.1.0a1__py3-none-any.whl
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/__init__.py +249 -0
- bootstack/__main__.py +5 -0
- bootstack/api/__init__.py +127 -0
- bootstack/api/app.py +30 -0
- bootstack/api/constants.py +3 -0
- bootstack/api/data.py +23 -0
- bootstack/api/dialogs.py +44 -0
- bootstack/api/i18n.py +17 -0
- bootstack/api/localization.py +16 -0
- bootstack/api/menu.py +7 -0
- bootstack/api/style.py +23 -0
- bootstack/api/utils.py +24 -0
- bootstack/api/widgets.py +137 -0
- bootstack/assets/__init__.py +24 -0
- bootstack/assets/bootstack-transparent.png +0 -0
- bootstack/assets/bootstack.ico +0 -0
- bootstack/assets/bootstack.png +0 -0
- bootstack/assets/elements/__init__.py +0 -0
- bootstack/assets/elements/badge-pill.png +0 -0
- bootstack/assets/elements/badge-square.png +0 -0
- bootstack/assets/elements/border.png +0 -0
- bootstack/assets/elements/button-compact.png +0 -0
- bootstack/assets/elements/button-default.png +0 -0
- bootstack/assets/elements/button-group-horizontal-after-compact.png +0 -0
- bootstack/assets/elements/button-group-horizontal-after-default.png +0 -0
- bootstack/assets/elements/button-group-horizontal-before-compact.png +0 -0
- bootstack/assets/elements/button-group-horizontal-before-default.png +0 -0
- bootstack/assets/elements/button-group-horizontal-center-compact.png +0 -0
- bootstack/assets/elements/button-group-horizontal-center-default.png +0 -0
- bootstack/assets/elements/button-group-vertical-after-compact.png +0 -0
- bootstack/assets/elements/button-group-vertical-after-default.png +0 -0
- bootstack/assets/elements/button-group-vertical-before-compact.png +0 -0
- bootstack/assets/elements/button-group-vertical-before-default.png +0 -0
- bootstack/assets/elements/button-group-vertical-center-compact.png +0 -0
- bootstack/assets/elements/button-group-vertical-center-default.png +0 -0
- bootstack/assets/elements/checkbox-checked.png +0 -0
- bootstack/assets/elements/checkbox-indeterminate.png +0 -0
- bootstack/assets/elements/checkbox-unchecked.png +0 -0
- bootstack/assets/elements/field.png +0 -0
- bootstack/assets/elements/input-after-compact.png +0 -0
- bootstack/assets/elements/input-after-default.png +0 -0
- bootstack/assets/elements/input-before-compact.png +0 -0
- bootstack/assets/elements/input-before-default.png +0 -0
- bootstack/assets/elements/input-compact.png +0 -0
- bootstack/assets/elements/input-default.png +0 -0
- bootstack/assets/elements/list-item-separated.png +0 -0
- bootstack/assets/elements/list-item.png +0 -0
- bootstack/assets/elements/manifest.toml +480 -0
- bootstack/assets/elements/menu-item.png +0 -0
- bootstack/assets/elements/nav-button-compact.png +0 -0
- bootstack/assets/elements/nav-button-default.png +0 -0
- bootstack/assets/elements/nav-icon-button-compact.png +0 -0
- bootstack/assets/elements/nav-icon-button-default.png +0 -0
- bootstack/assets/elements/notebook-client-border.png +0 -0
- bootstack/assets/elements/notebook-tab-active.png +0 -0
- bootstack/assets/elements/notebook-tab-bar.png +0 -0
- bootstack/assets/elements/notebook-tab-normal.png +0 -0
- bootstack/assets/elements/notebook-tab-pill.png +0 -0
- bootstack/assets/elements/progress-bar-horizontal-striped.png +0 -0
- bootstack/assets/elements/progress-bar-solid.png +0 -0
- bootstack/assets/elements/progress-bar-thin.png +0 -0
- bootstack/assets/elements/progress-bar-vertical-striped.png +0 -0
- bootstack/assets/elements/radio-selected.png +0 -0
- bootstack/assets/elements/radio-unselected.png +0 -0
- bootstack/assets/elements/scrollbar-horizontal.png +0 -0
- bootstack/assets/elements/scrollbar-vertical.png +0 -0
- bootstack/assets/elements/slider-handle-focus.png +0 -0
- bootstack/assets/elements/slider-handle.png +0 -0
- bootstack/assets/elements/slider-track-horizontal.png +0 -0
- bootstack/assets/elements/slider-track-vertical.png +0 -0
- bootstack/assets/elements/switch-off.png +0 -0
- bootstack/assets/elements/switch-on.png +0 -0
- bootstack/assets/elements/tabs-bar-horizontal.png +0 -0
- bootstack/assets/elements/tabs-bar-vertical.png +0 -0
- bootstack/assets/elements/tabs-pill.png +0 -0
- bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +853 -0
- bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +875 -0
- bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +853 -0
- bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +853 -0
- bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +853 -0
- bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +875 -0
- bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +853 -0
- bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +853 -0
- bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +851 -0
- bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +842 -0
- bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +841 -0
- bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +914 -0
- bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +842 -0
- bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +841 -0
- bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +841 -0
- bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +842 -0
- bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +842 -0
- bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +842 -0
- bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +842 -0
- bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +842 -0
- bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +842 -0
- bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +842 -0
- bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
- bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +842 -0
- bootstack/assets/themes/__init__.py +0 -0
- bootstack/assets/themes/amber-dark.json +32 -0
- bootstack/assets/themes/amber-light.json +32 -0
- bootstack/assets/themes/aurora-dark.json +32 -0
- bootstack/assets/themes/aurora-light.json +32 -0
- bootstack/assets/themes/bootstrap-dark.json +32 -0
- bootstack/assets/themes/bootstrap-light.json +32 -0
- bootstack/assets/themes/classic-dark.json +32 -0
- bootstack/assets/themes/classic-light.json +32 -0
- bootstack/assets/themes/docs-dark.json +32 -0
- bootstack/assets/themes/docs-light.json +32 -0
- bootstack/assets/themes/forest-dark.json +32 -0
- bootstack/assets/themes/forest-light.json +32 -0
- bootstack/assets/themes/ocean-dark.json +32 -0
- bootstack/assets/themes/ocean-light.json +32 -0
- bootstack/assets/themes/rose-dark.json +32 -0
- bootstack/assets/themes/rose-light.json +32 -0
- bootstack/assets/widgets/__init__.py +0 -0
- bootstack/assets/widgets/badge-default.png +0 -0
- bootstack/assets/widgets/badge-pill.png +0 -0
- bootstack/assets/widgets/border.png +0 -0
- bootstack/assets/widgets/button-group-horizontal-after.png +0 -0
- bootstack/assets/widgets/button-group-horizontal-before.png +0 -0
- bootstack/assets/widgets/button-group-horizontal-center.png +0 -0
- bootstack/assets/widgets/button-group-vertical-after.png +0 -0
- bootstack/assets/widgets/button-group-vertical-before.png +0 -0
- bootstack/assets/widgets/button-group-vertical-center.png +0 -0
- bootstack/assets/widgets/button.png +0 -0
- bootstack/assets/widgets/checkbox-checked.png +0 -0
- bootstack/assets/widgets/checkbox-indeterminate.png +0 -0
- bootstack/assets/widgets/checkbox-unchecked.png +0 -0
- bootstack/assets/widgets/field.png +0 -0
- bootstack/assets/widgets/icon-button.png +0 -0
- bootstack/assets/widgets/input-inner.png +0 -0
- bootstack/assets/widgets/input-prefix.png +0 -0
- bootstack/assets/widgets/input-suffix.png +0 -0
- bootstack/assets/widgets/input.png +0 -0
- bootstack/assets/widgets/list-item-focus.png +0 -0
- bootstack/assets/widgets/list-item-separated.png +0 -0
- bootstack/assets/widgets/menu-item-separated.png +0 -0
- bootstack/assets/widgets/notebook-client-border.png +0 -0
- bootstack/assets/widgets/notebook-pill-active.png +0 -0
- bootstack/assets/widgets/notebook-pill-inactive.png +0 -0
- bootstack/assets/widgets/notebook-tab-active.png +0 -0
- bootstack/assets/widgets/notebook-tab-border.png +0 -0
- bootstack/assets/widgets/notebook-tab-normal.png +0 -0
- bootstack/assets/widgets/notebook-underline.png +0 -0
- bootstack/assets/widgets/progress-bar-horizontal-default.png +0 -0
- bootstack/assets/widgets/progress-bar-horizontal-striped.png +0 -0
- bootstack/assets/widgets/progress-bar-vertical-default.png +0 -0
- bootstack/assets/widgets/progress-bar-vertical-striped.png +0 -0
- bootstack/assets/widgets/progress-trough-horizontal.png +0 -0
- bootstack/assets/widgets/progress-trough-vertical.png +0 -0
- bootstack/assets/widgets/radio-selected.png +0 -0
- bootstack/assets/widgets/radio-unselected.png +0 -0
- bootstack/assets/widgets/scrollbar-horizontal-rounded.png +0 -0
- bootstack/assets/widgets/scrollbar-vertical-rounded.png +0 -0
- bootstack/assets/widgets/separator-horizontal.png +0 -0
- bootstack/assets/widgets/separator-vertical.png +0 -0
- bootstack/assets/widgets/slider-handle-focus.png +0 -0
- bootstack/assets/widgets/slider-handle.png +0 -0
- bootstack/assets/widgets/slider-track-horizontal.png +0 -0
- bootstack/assets/widgets/slider-track-vertical.png +0 -0
- bootstack/assets/widgets/switch-off.png +0 -0
- bootstack/assets/widgets/switch-on.png +0 -0
- bootstack/assets/widgets/tabs-bar-horizontal.png +0 -0
- bootstack/assets/widgets/tabs-bar-vertical.png +0 -0
- bootstack/assets/widgets/tabs-pill.png +0 -0
- bootstack/cli/__init__.py +124 -0
- bootstack/cli/__main__.py +6 -0
- bootstack/cli/add.py +439 -0
- bootstack/cli/build.py +115 -0
- bootstack/cli/config.py +287 -0
- bootstack/cli/demo.py +1267 -0
- bootstack/cli/doctor.py +195 -0
- bootstack/cli/list_cmd.py +71 -0
- bootstack/cli/promote.py +120 -0
- bootstack/cli/pyinstaller.py +246 -0
- bootstack/cli/run.py +99 -0
- bootstack/cli/start.py +105 -0
- bootstack/cli/templates/__init__.py +861 -0
- bootstack/constants.py +325 -0
- bootstack/core/__init__.py +34 -0
- bootstack/core/capabilities/__init__.py +45 -0
- bootstack/core/capabilities/after.py +103 -0
- bootstack/core/capabilities/bind.py +154 -0
- bootstack/core/capabilities/bindtags.py +112 -0
- bootstack/core/capabilities/busy.py +61 -0
- bootstack/core/capabilities/clipboard.py +88 -0
- bootstack/core/capabilities/focus.py +118 -0
- bootstack/core/capabilities/grab.py +65 -0
- bootstack/core/capabilities/grid.py +188 -0
- bootstack/core/capabilities/localization.py +231 -0
- bootstack/core/capabilities/pack.py +119 -0
- bootstack/core/capabilities/place.py +92 -0
- bootstack/core/capabilities/selection.py +136 -0
- bootstack/core/capabilities/signals.py +242 -0
- bootstack/core/capabilities/winfo.py +315 -0
- bootstack/core/colorutils.py +234 -0
- bootstack/core/exceptions.py +95 -0
- bootstack/core/images.py +283 -0
- bootstack/core/localization/README.md +90 -0
- bootstack/core/localization/__init__.py +13 -0
- bootstack/core/localization/intl_format.py +580 -0
- bootstack/core/localization/msgcat.py +425 -0
- bootstack/core/localization/specs.py +143 -0
- bootstack/core/mixins/__init__.py +1 -0
- bootstack/core/mixins/ttk_state.py +35 -0
- bootstack/core/mixins/widget.py +132 -0
- bootstack/core/publisher.py +147 -0
- bootstack/core/signals/README.md +112 -0
- bootstack/core/signals/__init__.py +8 -0
- bootstack/core/signals/integration.py +100 -0
- bootstack/core/signals/signal.py +317 -0
- bootstack/core/signals/types.py +4 -0
- bootstack/core/validation/__init__.py +5 -0
- bootstack/core/validation/types.py +13 -0
- bootstack/core/validation/validation_result.py +17 -0
- bootstack/core/validation/validation_rules.py +112 -0
- bootstack/core/variables.py +62 -0
- bootstack/datasource/README.md +607 -0
- bootstack/datasource/__init__.py +51 -0
- bootstack/datasource/base.py +474 -0
- bootstack/datasource/file_source.py +541 -0
- bootstack/datasource/memory_source.py +482 -0
- bootstack/datasource/sqlite_source.py +453 -0
- bootstack/datasource/types.py +259 -0
- bootstack/dialogs/__init__.py +56 -0
- bootstack/dialogs/colorchooser.py +674 -0
- bootstack/dialogs/colordropper.py +257 -0
- bootstack/dialogs/datedialog.py +404 -0
- bootstack/dialogs/dialog.py +514 -0
- bootstack/dialogs/filterdialog.py +358 -0
- bootstack/dialogs/fontdialog.py +339 -0
- bootstack/dialogs/formdialog.py +541 -0
- bootstack/dialogs/message.py +489 -0
- bootstack/dialogs/query.py +561 -0
- bootstack/py.typed +1 -0
- bootstack/runtime/__init__.py +3 -0
- bootstack/runtime/app.py +879 -0
- bootstack/runtime/base_window.py +786 -0
- bootstack/runtime/events.py +399 -0
- bootstack/runtime/menu.py +510 -0
- bootstack/runtime/shortcuts.py +423 -0
- bootstack/runtime/tk_patch.py +31 -0
- bootstack/runtime/toplevel.py +131 -0
- bootstack/runtime/utility.py +371 -0
- bootstack/runtime/visual_focus.py +228 -0
- bootstack/runtime/window_utilities.py +1043 -0
- bootstack/style/__init__.py +5498 -0
- bootstack/style/bootstyle.py +507 -0
- bootstack/style/bootstyle_builder_base.py +752 -0
- bootstack/style/bootstyle_builder_mixed.py +93 -0
- bootstack/style/bootstyle_builder_tk.py +109 -0
- bootstack/style/bootstyle_builder_ttk.py +354 -0
- bootstack/style/builders/__init__.py +51 -0
- bootstack/style/builders/badge.py +44 -0
- bootstack/style/builders/button.py +453 -0
- bootstack/style/builders/buttongroup.py +344 -0
- bootstack/style/builders/calendar.py +271 -0
- bootstack/style/builders/checkbutton.py +95 -0
- bootstack/style/builders/combobox.py +112 -0
- bootstack/style/builders/contextmenu.py +268 -0
- bootstack/style/builders/entry.py +83 -0
- bootstack/style/builders/expander.py +171 -0
- bootstack/style/builders/field.py +312 -0
- bootstack/style/builders/frame.py +27 -0
- bootstack/style/builders/label.py +28 -0
- bootstack/style/builders/labelframe.py +41 -0
- bootstack/style/builders/listview.py +267 -0
- bootstack/style/builders/menubar.py +74 -0
- bootstack/style/builders/menubutton.py +408 -0
- bootstack/style/builders/notebook.py +316 -0
- bootstack/style/builders/panedwindow.py +25 -0
- bootstack/style/builders/progressbar.py +71 -0
- bootstack/style/builders/radiobutton.py +68 -0
- bootstack/style/builders/scale.py +66 -0
- bootstack/style/builders/scrollbar.py +360 -0
- bootstack/style/builders/separator.py +45 -0
- bootstack/style/builders/sidenav.py +313 -0
- bootstack/style/builders/sizegrip.py +15 -0
- bootstack/style/builders/spinbox.py +119 -0
- bootstack/style/builders/switch.py +67 -0
- bootstack/style/builders/tabitem.py +205 -0
- bootstack/style/builders/toolbutton.py +260 -0
- bootstack/style/builders/tooltip.py +26 -0
- bootstack/style/builders/treeview.py +269 -0
- bootstack/style/builders/utils.py +404 -0
- bootstack/style/builders_tk/__init__.py +16 -0
- bootstack/style/builders_tk/defaults.py +229 -0
- bootstack/style/element.py +173 -0
- bootstack/style/style.py +499 -0
- bootstack/style/theme_provider.py +449 -0
- bootstack/style/tk_patch.py +5 -0
- bootstack/style/token_maps.py +42 -0
- bootstack/style/types.py +32 -0
- bootstack/style/typography.py +527 -0
- bootstack/style/utility.py +696 -0
- bootstack/themes/__init__.py +12 -0
- bootstack/themes/standard.py +415 -0
- bootstack/themes/user.py +45 -0
- bootstack/widgets/__init__.py +53 -0
- bootstack/widgets/composites/__init__.py +38 -0
- bootstack/widgets/composites/accordion.py +385 -0
- bootstack/widgets/composites/appshell.py +445 -0
- bootstack/widgets/composites/buttongroup.py +391 -0
- bootstack/widgets/composites/calendar.py +914 -0
- bootstack/widgets/composites/compositeframe.py +282 -0
- bootstack/widgets/composites/contextmenu.py +1754 -0
- bootstack/widgets/composites/dateentry.py +261 -0
- bootstack/widgets/composites/dropdownbutton.py +190 -0
- bootstack/widgets/composites/expander.py +508 -0
- bootstack/widgets/composites/field.py +448 -0
- bootstack/widgets/composites/floodgauge.py +434 -0
- bootstack/widgets/composites/form.py +983 -0
- bootstack/widgets/composites/labeledscale.py +209 -0
- bootstack/widgets/composites/list/__init__.py +15 -0
- bootstack/widgets/composites/list/listitem.py +733 -0
- bootstack/widgets/composites/list/listview.py +1507 -0
- bootstack/widgets/composites/menubar.py +303 -0
- bootstack/widgets/composites/meter.py +882 -0
- bootstack/widgets/composites/numericentry.py +183 -0
- bootstack/widgets/composites/pagestack.py +330 -0
- bootstack/widgets/composites/passwordentry.py +149 -0
- bootstack/widgets/composites/pathentry.py +223 -0
- bootstack/widgets/composites/radiogroup.py +466 -0
- bootstack/widgets/composites/scrolledtext.py +388 -0
- bootstack/widgets/composites/scrolledtext.pyi +186 -0
- bootstack/widgets/composites/scrollview.py +675 -0
- bootstack/widgets/composites/selectbox.py +544 -0
- bootstack/widgets/composites/sidenav/__init__.py +24 -0
- bootstack/widgets/composites/sidenav/group.py +485 -0
- bootstack/widgets/composites/sidenav/header.py +83 -0
- bootstack/widgets/composites/sidenav/item.py +413 -0
- bootstack/widgets/composites/sidenav/separator.py +51 -0
- bootstack/widgets/composites/sidenav/view.py +919 -0
- bootstack/widgets/composites/spinnerentry.py +232 -0
- bootstack/widgets/composites/tableview/__init__.py +5 -0
- bootstack/widgets/composites/tableview/tableview.py +2254 -0
- bootstack/widgets/composites/tableview/types.py +169 -0
- bootstack/widgets/composites/tabs/__init__.py +6 -0
- bootstack/widgets/composites/tabs/tabitem.py +372 -0
- bootstack/widgets/composites/tabs/tabs.py +478 -0
- bootstack/widgets/composites/tabs/tabview.py +352 -0
- bootstack/widgets/composites/textentry.py +90 -0
- bootstack/widgets/composites/timeentry.py +189 -0
- bootstack/widgets/composites/toast.py +364 -0
- bootstack/widgets/composites/togglegroup.py +382 -0
- bootstack/widgets/composites/toolbar.py +393 -0
- bootstack/widgets/composites/tooltip.py +404 -0
- bootstack/widgets/internal/__init__.py +0 -0
- bootstack/widgets/internal/wrapper_base.py +304 -0
- bootstack/widgets/mixins/__init__.py +25 -0
- bootstack/widgets/mixins/configure_mixin.py +186 -0
- bootstack/widgets/mixins/entry_mixin.py +70 -0
- bootstack/widgets/mixins/font_mixin.py +346 -0
- bootstack/widgets/mixins/icon_mixin.py +38 -0
- bootstack/widgets/mixins/localization_mixin.py +255 -0
- bootstack/widgets/mixins/signal_mixin.py +272 -0
- bootstack/widgets/mixins/validation_mixin.py +204 -0
- bootstack/widgets/parts/__init__.py +11 -0
- bootstack/widgets/parts/numberentry_part.py +345 -0
- bootstack/widgets/parts/spinnerentry_part.py +394 -0
- bootstack/widgets/parts/textentry_part.py +344 -0
- bootstack/widgets/primitives/__init__.py +55 -0
- bootstack/widgets/primitives/badge.py +44 -0
- bootstack/widgets/primitives/button.py +89 -0
- bootstack/widgets/primitives/card.py +66 -0
- bootstack/widgets/primitives/checkbutton.py +124 -0
- bootstack/widgets/primitives/checktoggle.py +53 -0
- bootstack/widgets/primitives/combobox.py +165 -0
- bootstack/widgets/primitives/entry.py +98 -0
- bootstack/widgets/primitives/frame.py +206 -0
- bootstack/widgets/primitives/gridframe.py +479 -0
- bootstack/widgets/primitives/label.py +95 -0
- bootstack/widgets/primitives/labelframe.py +63 -0
- bootstack/widgets/primitives/menubutton.py +118 -0
- bootstack/widgets/primitives/notebook.py +551 -0
- bootstack/widgets/primitives/optionmenu.py +248 -0
- bootstack/widgets/primitives/packframe.py +228 -0
- bootstack/widgets/primitives/panedwindow.py +58 -0
- bootstack/widgets/primitives/progressbar.py +95 -0
- bootstack/widgets/primitives/radiobutton.py +115 -0
- bootstack/widgets/primitives/radiotoggle.py +50 -0
- bootstack/widgets/primitives/scale.py +85 -0
- bootstack/widgets/primitives/scrollbar.py +56 -0
- bootstack/widgets/primitives/separator.py +56 -0
- bootstack/widgets/primitives/sizegrip.py +47 -0
- bootstack/widgets/primitives/spinbox.py +91 -0
- bootstack/widgets/primitives/switch.py +41 -0
- bootstack/widgets/primitives/treeview.py +77 -0
- bootstack/widgets/types.py +20 -0
- bootstack-0.1.0a1.dist-info/METADATA +196 -0
- bootstack-0.1.0a1.dist-info/RECORD +419 -0
- bootstack-0.1.0a1.dist-info/WHEEL +5 -0
- bootstack-0.1.0a1.dist-info/entry_points.txt +2 -0
- bootstack-0.1.0a1.dist-info/licenses/LICENSE +22 -0
- bootstack-0.1.0a1.dist-info/licenses/NOTICE +10 -0
- bootstack-0.1.0a1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from tkinter import ttk
|
|
4
|
+
from typing import Any, Callable, Literal, Optional, TYPE_CHECKING, TypedDict
|
|
5
|
+
|
|
6
|
+
from typing_extensions import Unpack
|
|
7
|
+
|
|
8
|
+
from bootstack.core.mixins.ttk_state import TtkStateMixin
|
|
9
|
+
from bootstack.core.mixins.widget import WidgetCapabilitiesMixin
|
|
10
|
+
from bootstack.widgets.internal.wrapper_base import TTKWrapperBase
|
|
11
|
+
from bootstack.widgets.mixins import IconMixin, LocalizationMixin, SignalMixin, TextSignalMixin
|
|
12
|
+
from bootstack.widgets.mixins.configure_mixin import configure_delegate
|
|
13
|
+
from bootstack.widgets.types import Master
|
|
14
|
+
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from bootstack.core.signals import Signal
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class RadioButtonKwargs(TypedDict, total=False):
|
|
20
|
+
# Standard ttk.Radiobutton options
|
|
21
|
+
text: Any
|
|
22
|
+
command: Optional[Callable[[], Any]]
|
|
23
|
+
image: Any
|
|
24
|
+
icon: Any
|
|
25
|
+
icon_only: bool
|
|
26
|
+
compound: Literal['text', 'image', 'top', 'bottom', 'left', 'right', 'center', 'none'] | str
|
|
27
|
+
variable: Any
|
|
28
|
+
signal: Signal[Any]
|
|
29
|
+
value: Any
|
|
30
|
+
padding: Any
|
|
31
|
+
anchor: str
|
|
32
|
+
width: int
|
|
33
|
+
underline: int
|
|
34
|
+
state: Literal['normal', 'active', 'disabled', 'readonly'] | str
|
|
35
|
+
takefocus: Any
|
|
36
|
+
style: str
|
|
37
|
+
class_: str
|
|
38
|
+
cursor: str
|
|
39
|
+
name: str
|
|
40
|
+
textvariable: Any
|
|
41
|
+
textsignal: Signal[str]
|
|
42
|
+
|
|
43
|
+
# bootstack-specific extensions
|
|
44
|
+
bootstyle: str # DEPRECATED: Use accent and variant instead
|
|
45
|
+
accent: str
|
|
46
|
+
variant: str
|
|
47
|
+
surface: str
|
|
48
|
+
style_options: dict[str, Any]
|
|
49
|
+
localize: bool | Literal['auto']
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class RadioButton(LocalizationMixin, SignalMixin, TextSignalMixin, IconMixin, TTKWrapperBase, WidgetCapabilitiesMixin, TtkStateMixin, ttk.Radiobutton):
|
|
53
|
+
"""bootstack wrapper for `ttk.Radiobutton` with bootstyle and icon support."""
|
|
54
|
+
|
|
55
|
+
_ttk_base = ttk.Radiobutton
|
|
56
|
+
|
|
57
|
+
def __init__(self, master: Master = None, **kwargs: Unpack[RadioButtonKwargs]) -> None:
|
|
58
|
+
"""Create a themed bootstack Radiobutton.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
master: Parent widget. If None, uses the default root window.
|
|
62
|
+
|
|
63
|
+
Other Parameters:
|
|
64
|
+
text (str): Text to display.
|
|
65
|
+
textvariable (Variable): Tk variable linked to the text.
|
|
66
|
+
textsignal (Signal[str]): Reactive Signal linked to the text (auto-synced with textvariable).
|
|
67
|
+
command (Callable): Callable invoked when the value is selected.
|
|
68
|
+
image (PhotoImage): Image to display.
|
|
69
|
+
icon (str | dict): Theme-aware icon spec handled by the style system.
|
|
70
|
+
icon_only (bool): Removes the additional padding added for label.
|
|
71
|
+
compound (str): Placement of the image relative to text.
|
|
72
|
+
variable (Variable): Linked Tk variable that receives the selected value.
|
|
73
|
+
signal (Signal): Reactive Signal that receives the selected value (auto-synced with variable).
|
|
74
|
+
value (Any): The value assigned to `variable` when this radio is selected.
|
|
75
|
+
padding (int | tuple): Extra space around the content.
|
|
76
|
+
anchor (str): Determines how the content is aligned in the container. Combination of 'n', 's', 'e', 'w', or 'center' (default).
|
|
77
|
+
width (int): Width of the control in characters.
|
|
78
|
+
underline (int): Index of character to underline in `text`.
|
|
79
|
+
state (str): Widget state.
|
|
80
|
+
takefocus (bool): Whether the widget participates in focus traversal.
|
|
81
|
+
style (str): Explicit ttk style name (overrides accent/variant).
|
|
82
|
+
accent (str): Accent token for styling, e.g. 'primary', 'success', 'danger'.
|
|
83
|
+
variant (str): Style variant, e.g. 'default'.
|
|
84
|
+
bootstyle (str): DEPRECATED - Use `accent` and `variant` instead.
|
|
85
|
+
Combined style tokens (e.g., 'primary', 'success').
|
|
86
|
+
surface (str): Optional surface token; otherwise inherited.
|
|
87
|
+
style_options (dict): Optional dict forwarded to the style builder.
|
|
88
|
+
localize (bool | Literal['auto']): Determines the widget's localization mode.
|
|
89
|
+
"""
|
|
90
|
+
kwargs.update(style_options=self._capture_style_options(['icon_only', 'icon', 'anchor'], kwargs))
|
|
91
|
+
super().__init__(master, **kwargs)
|
|
92
|
+
|
|
93
|
+
def get(self) -> Any:
|
|
94
|
+
"""Return the current selected value."""
|
|
95
|
+
return self.variable.get()
|
|
96
|
+
|
|
97
|
+
def set(self, value: Any) -> None:
|
|
98
|
+
"""Set the selected value."""
|
|
99
|
+
self.variable.set(value)
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
def value(self) -> Any:
|
|
103
|
+
"""Get or set the radiobutton's selected value."""
|
|
104
|
+
return self.get()
|
|
105
|
+
|
|
106
|
+
@value.setter
|
|
107
|
+
def value(self, value: Any) -> None:
|
|
108
|
+
self.set(value)
|
|
109
|
+
|
|
110
|
+
@configure_delegate('value')
|
|
111
|
+
def _delegate_value(self, value=None):
|
|
112
|
+
"""Get or set the value via configure."""
|
|
113
|
+
if value is None:
|
|
114
|
+
return self.get()
|
|
115
|
+
self.set(value)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from typing import Literal
|
|
2
|
+
|
|
3
|
+
from bootstack.widgets.primitives.radiobutton import RadioButton
|
|
4
|
+
from bootstack.widgets.types import Master
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class RadioToggle(RadioButton):
|
|
8
|
+
"""bootstack wrapper for `ttk.Radiobutton` that renders with a toggle badge style."""
|
|
9
|
+
|
|
10
|
+
def __init__(self, master: Master = None, **kwargs):
|
|
11
|
+
"""Create a themed bootstack RadioToggle.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
master: Parent widget. If None, uses the default root window.
|
|
15
|
+
|
|
16
|
+
Other Parameters:
|
|
17
|
+
text (str): Text to display.
|
|
18
|
+
textvariable (Variable): Tk variable linked to the text.
|
|
19
|
+
textsignal (Signal[str]): Reactive Signal linked to the text (auto-synced with textvariable).
|
|
20
|
+
command (Callable): Callable invoked when the value is selected.
|
|
21
|
+
image (PhotoImage): Image to display.
|
|
22
|
+
icon (str | dict): Theme-aware icon spec handled by the style system.
|
|
23
|
+
icon_only (bool): Removes the additional padding added for label text.
|
|
24
|
+
compound (str): Placement of the image relative to text.
|
|
25
|
+
variable (Variable): Linked Tk variable that receives the selected value.
|
|
26
|
+
signal (Signal): Reactive Signal that receives the selected value (auto-synced with variable).
|
|
27
|
+
value (Any): The value assigned to `variable` when this radio is selected.
|
|
28
|
+
padding (int | tuple): Extra space around the content.
|
|
29
|
+
anchor (str): Determines how the content is aligned in the container. Combination of 'n', 's', 'e', 'w', or 'center' (default).
|
|
30
|
+
density (str): The vertical and horizontal compactness of widget content, e.g. 'default', 'compact'.
|
|
31
|
+
width (int): Width of the control in characters.
|
|
32
|
+
underline (int): Index of character to underline in `text`.
|
|
33
|
+
state (str): Widget state ('normal', 'active', 'disabled', 'readonly').
|
|
34
|
+
takefocus (bool): Whether the widget participates in focus traversal.
|
|
35
|
+
accent (str): Accent token for styling, e.g. 'primary', 'success', 'danger'.
|
|
36
|
+
surface (str): Optional surface token; otherwise inherited.
|
|
37
|
+
style_options (dict): Optional dict forwarded to the style builder.
|
|
38
|
+
localize (bool | Literal['auto']): Determines the widget's localization mode.
|
|
39
|
+
"""
|
|
40
|
+
self._capture_density_option(kwargs)
|
|
41
|
+
kwargs.setdefault('ttk_class', 'Toolbutton')
|
|
42
|
+
super().__init__(master, **kwargs)
|
|
43
|
+
|
|
44
|
+
@staticmethod
|
|
45
|
+
def _capture_density_option(kwargs: dict) -> None:
|
|
46
|
+
"""Capture density from kwargs into style_options."""
|
|
47
|
+
density: Literal['default', 'compact'] | None = kwargs.pop('density', None)
|
|
48
|
+
if density is not None:
|
|
49
|
+
style_options = kwargs.setdefault('style_options', {})
|
|
50
|
+
style_options['density'] = density
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from tkinter import ttk
|
|
4
|
+
from typing import Any, TypedDict, TYPE_CHECKING
|
|
5
|
+
from typing_extensions import Unpack
|
|
6
|
+
|
|
7
|
+
from bootstack.core.mixins.ttk_state import TtkStateMixin
|
|
8
|
+
from bootstack.core.mixins.widget import WidgetCapabilitiesMixin
|
|
9
|
+
from bootstack.widgets.internal.wrapper_base import TTKWrapperBase
|
|
10
|
+
from bootstack.widgets.mixins.configure_mixin import configure_delegate
|
|
11
|
+
from bootstack.widgets.types import Master
|
|
12
|
+
from ..mixins import SignalMixin
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from bootstack.core.signals import Signal
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ScaleKwargs(TypedDict, total=False):
|
|
19
|
+
# Standard ttk.Scale options
|
|
20
|
+
from_: float
|
|
21
|
+
to: float
|
|
22
|
+
value: float
|
|
23
|
+
variable: Any
|
|
24
|
+
signal: Signal[Any]
|
|
25
|
+
orient: Any
|
|
26
|
+
length: Any
|
|
27
|
+
command: Any
|
|
28
|
+
takefocus: Any
|
|
29
|
+
style: str
|
|
30
|
+
class_: str
|
|
31
|
+
cursor: str
|
|
32
|
+
name: str
|
|
33
|
+
|
|
34
|
+
# bootstack-specific extensions
|
|
35
|
+
bootstyle: str # DEPRECATED: Use accent and variant instead
|
|
36
|
+
accent: str
|
|
37
|
+
surface: str
|
|
38
|
+
style_options: dict[str, Any]
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class Scale(SignalMixin, TTKWrapperBase, WidgetCapabilitiesMixin, TtkStateMixin, ttk.Scale):
|
|
42
|
+
"""bootstack wrapper for `ttk.Scale` with bootstyle support."""
|
|
43
|
+
|
|
44
|
+
_ttk_base = ttk.Scale
|
|
45
|
+
|
|
46
|
+
def __init__(self, master: Master = None, **kwargs: Unpack[ScaleKwargs]) -> None:
|
|
47
|
+
"""Create a themed bootstack Scale.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
master: Parent widget. If None, uses the default root window.
|
|
51
|
+
|
|
52
|
+
Other Parameters:
|
|
53
|
+
from_ (float): Minimum value.
|
|
54
|
+
to (float): Maximum value.
|
|
55
|
+
value (float): Initial value.
|
|
56
|
+
variable (Variable): Tk variable linked to the value.
|
|
57
|
+
signal (Signal): Reactive Signal linked to the value (auto-synced with variable).
|
|
58
|
+
orient (str): Orientation of the scale ('horizontal' or 'vertical').
|
|
59
|
+
length (int): Scale length in pixels.
|
|
60
|
+
command (Callable): Callback on value change.
|
|
61
|
+
takefocus (bool): Whether the widget participates in focus traversal.
|
|
62
|
+
accent (str): Accent token for styling, e.g. 'primary', 'success', 'danger'.
|
|
63
|
+
bootstyle (str): DEPRECATED - Use `accent` instead.
|
|
64
|
+
surface (str): Optional surface token; otherwise inherited.
|
|
65
|
+
style_options (dict): Optional dict forwarded to the style builder.
|
|
66
|
+
"""
|
|
67
|
+
super().__init__(master, **kwargs)
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def value(self) -> float:
|
|
71
|
+
"""Get or set the scale's current value."""
|
|
72
|
+
return self.get()
|
|
73
|
+
|
|
74
|
+
@value.setter
|
|
75
|
+
def value(self, value: float) -> None:
|
|
76
|
+
self.set(value)
|
|
77
|
+
|
|
78
|
+
@configure_delegate('value')
|
|
79
|
+
def _delegate_value(self, value=None):
|
|
80
|
+
"""Get or set the value via configure."""
|
|
81
|
+
if value is None:
|
|
82
|
+
return self.get()
|
|
83
|
+
self.set(value)
|
|
84
|
+
|
|
85
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from tkinter import ttk
|
|
4
|
+
from typing import Any, TypedDict
|
|
5
|
+
from typing_extensions import Unpack
|
|
6
|
+
|
|
7
|
+
from bootstack.core.mixins.ttk_state import TtkStateMixin
|
|
8
|
+
from bootstack.core.mixins.widget import WidgetCapabilitiesMixin
|
|
9
|
+
from bootstack.widgets.internal.wrapper_base import TTKWrapperBase
|
|
10
|
+
from bootstack.widgets.types import Master
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ScrollbarKwargs(TypedDict, total=False):
|
|
14
|
+
# Standard ttk.Scrollbar options
|
|
15
|
+
orient: Any
|
|
16
|
+
command: Any
|
|
17
|
+
takefocus: Any
|
|
18
|
+
style: str
|
|
19
|
+
class_: str
|
|
20
|
+
cursor: str
|
|
21
|
+
name: str
|
|
22
|
+
|
|
23
|
+
# bootstack-specific extensions
|
|
24
|
+
bootstyle: str # DEPRECATED: Use accent and variant instead
|
|
25
|
+
accent: str
|
|
26
|
+
variant: str
|
|
27
|
+
surface: str
|
|
28
|
+
style_options: dict[str, Any]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class Scrollbar(TTKWrapperBase, WidgetCapabilitiesMixin, TtkStateMixin, ttk.Scrollbar):
|
|
32
|
+
"""bootstack wrapper for `ttk.Scrollbar` with bootstyle support."""
|
|
33
|
+
|
|
34
|
+
_ttk_base = ttk.Scrollbar
|
|
35
|
+
|
|
36
|
+
def __init__(self, master: Master = None, **kwargs: Unpack[ScrollbarKwargs]) -> None:
|
|
37
|
+
"""Create a themed bootstack Scrollbar.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
master: Parent widget. If None, uses the default root window.
|
|
41
|
+
|
|
42
|
+
Other Parameters:
|
|
43
|
+
orient (str): Orientation of the scrollbar ('horizontal' or 'vertical').
|
|
44
|
+
command (Callable): Scroll command callback.
|
|
45
|
+
takefocus (bool): Whether the widget participates in focus traversal.
|
|
46
|
+
style (str): Explicit ttk style name (overrides accent/variant).
|
|
47
|
+
accent (str): Accent token for styling, e.g. 'primary', 'danger', 'success'.
|
|
48
|
+
variant (str): Style variant, e.g. 'default', 'round', 'square'.
|
|
49
|
+
bootstyle (str): DEPRECATED - Use `accent` and `variant` instead.
|
|
50
|
+
Combined style tokens (e.g., 'primary', 'danger-square').
|
|
51
|
+
surface (str): Optional surface token; otherwise inherited.
|
|
52
|
+
style_options (dict): Optional dict forwarded to the style builder.
|
|
53
|
+
"""
|
|
54
|
+
super().__init__(master, **kwargs)
|
|
55
|
+
|
|
56
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from tkinter import ttk
|
|
4
|
+
from typing import Any, TypedDict
|
|
5
|
+
from typing_extensions import Unpack
|
|
6
|
+
|
|
7
|
+
from bootstack.core.mixins.ttk_state import TtkStateMixin
|
|
8
|
+
from bootstack.core.mixins.widget import WidgetCapabilitiesMixin
|
|
9
|
+
from bootstack.widgets.internal.wrapper_base import TTKWrapperBase
|
|
10
|
+
from bootstack.widgets.types import Master
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class SeparatorKwargs(TypedDict, total=False):
|
|
14
|
+
# Standard ttk.Separator options
|
|
15
|
+
orient: Any
|
|
16
|
+
style: str
|
|
17
|
+
class_: str
|
|
18
|
+
cursor: str
|
|
19
|
+
name: str
|
|
20
|
+
|
|
21
|
+
# bootstack-specific extensions
|
|
22
|
+
bootstyle: str # DEPRECATED: Use accent and variant instead
|
|
23
|
+
accent: str
|
|
24
|
+
surface: str
|
|
25
|
+
thickness: int
|
|
26
|
+
length: int
|
|
27
|
+
style_options: dict[str, Any]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class Separator(TTKWrapperBase, WidgetCapabilitiesMixin, TtkStateMixin, ttk.Separator):
|
|
31
|
+
"""bootstack wrapper for `ttk.Separator` with bootstyle support."""
|
|
32
|
+
|
|
33
|
+
_ttk_base = ttk.Separator
|
|
34
|
+
|
|
35
|
+
def __init__(self, master: Master = None, **kwargs: Unpack[SeparatorKwargs]) -> None:
|
|
36
|
+
"""Create a themed bootstack Separator.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
master: Parent widget. If None, uses the default root window.
|
|
40
|
+
|
|
41
|
+
Other Parameters:
|
|
42
|
+
orient (str): Orientation of the separator ('horizontal' or 'vertical').
|
|
43
|
+
style (str): Explicit ttk style name (overrides accent/variant).
|
|
44
|
+
accent (str): Accent token for styling, e.g. 'primary', 'secondary' otherwise derived from inherited surface.
|
|
45
|
+
bootstyle (str): DEPRECATED - Use `accent` and `variant` instead.
|
|
46
|
+
Combined style tokens.
|
|
47
|
+
surface (str): Optional surface token; otherwise inherited.
|
|
48
|
+
thickness (int): Thickness of the separator.
|
|
49
|
+
length (int): Fixed length of the separator in pixels. If None,
|
|
50
|
+
stretches to fill available space.
|
|
51
|
+
style_options (dict): Optional dict forwarded to the style builder.
|
|
52
|
+
"""
|
|
53
|
+
kwargs.update(style_options=self._capture_style_options(['thickness', 'length'], kwargs))
|
|
54
|
+
super().__init__(master, **kwargs)
|
|
55
|
+
|
|
56
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from tkinter import ttk
|
|
4
|
+
from typing import Any, TypedDict
|
|
5
|
+
from typing_extensions import Unpack
|
|
6
|
+
|
|
7
|
+
from bootstack.core.mixins.ttk_state import TtkStateMixin
|
|
8
|
+
from bootstack.core.mixins.widget import WidgetCapabilitiesMixin
|
|
9
|
+
from bootstack.widgets.internal.wrapper_base import TTKWrapperBase
|
|
10
|
+
from bootstack.widgets.types import Master
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class SizeGripKwargs(TypedDict, total=False):
|
|
14
|
+
# Standard ttk.Sizegrip options
|
|
15
|
+
style: str
|
|
16
|
+
class_: str
|
|
17
|
+
cursor: str
|
|
18
|
+
name: str
|
|
19
|
+
|
|
20
|
+
# bootstack-specific extensions
|
|
21
|
+
bootstyle: str # DEPRECATED: Use accent and variant instead
|
|
22
|
+
accent: str
|
|
23
|
+
surface: str
|
|
24
|
+
style_options: dict[str, Any]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class SizeGrip(TTKWrapperBase, WidgetCapabilitiesMixin, TtkStateMixin, ttk.Sizegrip):
|
|
28
|
+
"""bootstack wrapper for `ttk.Sizegrip` with bootstyle support."""
|
|
29
|
+
|
|
30
|
+
_ttk_base = ttk.Sizegrip
|
|
31
|
+
|
|
32
|
+
def __init__(self, master: Master = None, **kwargs: Unpack[SizeGripKwargs]) -> None:
|
|
33
|
+
"""Create a themed bootstack Sizegrip.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
master: Parent widget. If None, uses the default root window.
|
|
37
|
+
|
|
38
|
+
Other Parameters:
|
|
39
|
+
style (str): Explicit ttk style name (overrides accent/variant).
|
|
40
|
+
accent (str): Accent token for styling.
|
|
41
|
+
bootstyle (str): DEPRECATED - Use `accent` instead.
|
|
42
|
+
surface (str): Optional surface token; otherwise inherited.
|
|
43
|
+
style_options (dict): Optional dict forwarded to the style builder.
|
|
44
|
+
"""
|
|
45
|
+
super().__init__(master, **kwargs)
|
|
46
|
+
|
|
47
|
+
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from tkinter import ttk
|
|
4
|
+
from typing import Any, Literal, TypedDict, TYPE_CHECKING
|
|
5
|
+
from typing_extensions import Unpack
|
|
6
|
+
|
|
7
|
+
from bootstack.core.mixins.ttk_state import TtkStateMixin
|
|
8
|
+
from bootstack.core.mixins.widget import WidgetCapabilitiesMixin
|
|
9
|
+
from bootstack.widgets.internal.wrapper_base import TTKWrapperBase
|
|
10
|
+
from bootstack.widgets.types import Master
|
|
11
|
+
from ..mixins import TextSignalMixin, configure_delegate
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from bootstack.core.signals import Signal
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class SpinboxKwargs(TypedDict, total=False):
|
|
18
|
+
# Standard ttk.Spinbox options
|
|
19
|
+
from_: float
|
|
20
|
+
to: float
|
|
21
|
+
increment: float
|
|
22
|
+
values: Any
|
|
23
|
+
wrap: bool
|
|
24
|
+
command: Any
|
|
25
|
+
font: Any
|
|
26
|
+
textvariable: Any
|
|
27
|
+
textsignal: Signal[Any]
|
|
28
|
+
format: str
|
|
29
|
+
width: int
|
|
30
|
+
state: Literal['normal','disabled','readonly'] | str
|
|
31
|
+
takefocus: Any
|
|
32
|
+
style: str
|
|
33
|
+
class_: str
|
|
34
|
+
cursor: str
|
|
35
|
+
name: str
|
|
36
|
+
|
|
37
|
+
# bootstack-specific extensions
|
|
38
|
+
bootstyle: str # DEPRECATED: Use accent and variant instead
|
|
39
|
+
accent: str
|
|
40
|
+
density: Literal['default', 'compact']
|
|
41
|
+
surface: str
|
|
42
|
+
style_options: dict[str, Any]
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class Spinbox(TextSignalMixin, TTKWrapperBase, WidgetCapabilitiesMixin, TtkStateMixin, ttk.Spinbox):
|
|
46
|
+
"""bootstack wrapper for `ttk.Spinbox` with bootstyle support."""
|
|
47
|
+
|
|
48
|
+
_ttk_base = ttk.Spinbox
|
|
49
|
+
|
|
50
|
+
def __init__(self, master: Master = None, **kwargs: Unpack[SpinboxKwargs]) -> None:
|
|
51
|
+
"""Create a themed bootstack Spinbox.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
master: Parent widget. If None, uses the default root window.
|
|
55
|
+
|
|
56
|
+
Other Parameters:
|
|
57
|
+
from_ (float): Minimum value.
|
|
58
|
+
to (float): Maximum value.
|
|
59
|
+
increment (float): Step size between values.
|
|
60
|
+
values (list): Sequence of values to cycle through.
|
|
61
|
+
wrap (bool): Whether to wrap between min/max.
|
|
62
|
+
command (Callable): Callback when the value changes.
|
|
63
|
+
textvariable (Variable): Tk variable linked to the entry text.
|
|
64
|
+
textsignal (Signal): Reactive Signal linked to the text (auto-synced with textvariable).
|
|
65
|
+
format (str): Display format string.
|
|
66
|
+
width (int): Widget width in characters.
|
|
67
|
+
state (str): Widget state.
|
|
68
|
+
takefocus (bool): Whether the widget participates in focus traversal.
|
|
69
|
+
style (str): Explicit ttk style name (overrides accent/variant).
|
|
70
|
+
accent (str): Accent token for styling, e.g. 'primary', 'danger', 'success'.
|
|
71
|
+
density (str): The vertical and horizontal compactness, e.g. 'default', 'compact'.
|
|
72
|
+
bootstyle (str): DEPRECATED - Use `accent` instead.
|
|
73
|
+
surface (str): Optional surface token; otherwise inherited.
|
|
74
|
+
style_options (dict): Optional dict forwarded to the style builder.
|
|
75
|
+
"""
|
|
76
|
+
if kwargs.get('density') == 'compact':
|
|
77
|
+
kwargs['font'] = 'caption'
|
|
78
|
+
kwargs.update(style_options=self._capture_style_options(['density'], kwargs))
|
|
79
|
+
super().__init__(master, **kwargs)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
@configure_delegate('density')
|
|
83
|
+
def _delegate_density(self, value=None):
|
|
84
|
+
if value is None:
|
|
85
|
+
return self.configure_style_options(value)
|
|
86
|
+
else:
|
|
87
|
+
if value == 'compact':
|
|
88
|
+
self.configure(font='caption')
|
|
89
|
+
else:
|
|
90
|
+
self.configure(font='body')
|
|
91
|
+
return self.configure_style_options(density=value)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from bootstack.widgets.primitives.checkbutton import CheckButton
|
|
2
|
+
from bootstack.widgets.types import Master
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Switch(CheckButton):
|
|
6
|
+
"""bootstack wrapper for `ttk.Checkbutton` that renders with a Switch style"""
|
|
7
|
+
|
|
8
|
+
def __init__(self, master: Master = None, **kwargs):
|
|
9
|
+
"""Create a themed bootstack Switch.
|
|
10
|
+
|
|
11
|
+
Args:
|
|
12
|
+
master: Parent widget. If None, uses the default root window.
|
|
13
|
+
|
|
14
|
+
Other Parameters:
|
|
15
|
+
text (str): Text to display on the toggle.
|
|
16
|
+
textvariable (Variable): Tk variable linked to the text.
|
|
17
|
+
textsignal (Signal[str]): Reactive Signal linked to the text (auto-synced with textvariable).
|
|
18
|
+
command (Callable): Callable invoked when the toggle changes state.
|
|
19
|
+
image (PhotoImage): Image to display.
|
|
20
|
+
icon (str | dict): Theme-aware icon spec handled by the style system.
|
|
21
|
+
icon_only (bool): If True, removes the additional padding reserved for text.
|
|
22
|
+
compound (str): Placement of the image relative to text.
|
|
23
|
+
variable (Variable): Linked variable controlling the on/off state.
|
|
24
|
+
signal (Signal): Reactive Signal controlling the on/off state (auto-synced with variable).
|
|
25
|
+
value (Any): Initial state for the widget's associated variable (defaults to None when unset).
|
|
26
|
+
onvalue (Any): Value set in `variable` when selected.
|
|
27
|
+
offvalue (Any): Value set in `variable` when deselected.
|
|
28
|
+
padding (int | tuple): Extra space around the content.
|
|
29
|
+
anchor (str): Determines how the content is aligned in the container. Combination of 'n', 's', 'e', 'w', or 'center' (default).
|
|
30
|
+
width (int): Width of the control in characters.
|
|
31
|
+
underline (int): Index of character to underline in `text`.
|
|
32
|
+
state (str): Widget state ('normal', 'active', 'disabled', 'readonly').
|
|
33
|
+
takefocus (bool): Whether the widget participates in focus traversal.
|
|
34
|
+
accent (str): Accent token for styling, e.g. 'primary', 'success', 'danger'.
|
|
35
|
+
surface (str): Optional surface token; otherwise inherited.
|
|
36
|
+
style_options (dict): Optional dict forwarded to the style builder.
|
|
37
|
+
localize (bool | Literal['auto']): Determines the widget's localization mode.
|
|
38
|
+
"""
|
|
39
|
+
if 'bootstyle' not in kwargs:
|
|
40
|
+
kwargs['variant'] = 'switch'
|
|
41
|
+
super().__init__(master, **kwargs)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from tkinter import ttk
|
|
4
|
+
from typing import Any, Literal, TypedDict
|
|
5
|
+
from typing_extensions import Unpack
|
|
6
|
+
|
|
7
|
+
from bootstack.core.mixins.ttk_state import TtkStateMixin
|
|
8
|
+
from bootstack.core.mixins.widget import WidgetCapabilitiesMixin
|
|
9
|
+
from bootstack.widgets.internal.wrapper_base import TTKWrapperBase
|
|
10
|
+
from bootstack.widgets.types import Master
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TreeViewKwargs(TypedDict, total=False):
|
|
14
|
+
# Standard ttk.Treeview options
|
|
15
|
+
columns: Any
|
|
16
|
+
displaycolumns: Any
|
|
17
|
+
show: Literal['tree', 'headings', '']
|
|
18
|
+
height: int
|
|
19
|
+
padding: Any
|
|
20
|
+
selectmode: Literal['browse','extended','none'] | str
|
|
21
|
+
style: str
|
|
22
|
+
class_: str
|
|
23
|
+
cursor: str
|
|
24
|
+
name: str
|
|
25
|
+
|
|
26
|
+
# bootstack-specific extensions
|
|
27
|
+
surface: str
|
|
28
|
+
density: Literal['default', 'compact']
|
|
29
|
+
border_color: str
|
|
30
|
+
show_border: bool
|
|
31
|
+
select_background: str
|
|
32
|
+
header_background: str
|
|
33
|
+
style_options: dict[str, Any]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class TreeView(TTKWrapperBase, WidgetCapabilitiesMixin, TtkStateMixin, ttk.Treeview):
|
|
37
|
+
"""bootstack wrapper for `ttk.Treeview` with bootstyle support."""
|
|
38
|
+
|
|
39
|
+
_ttk_base = ttk.Treeview
|
|
40
|
+
|
|
41
|
+
def __init__(self, master: Master = None, **kwargs: Unpack[TreeViewKwargs]) -> None:
|
|
42
|
+
"""Create a themed bootstack Treeview.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
master: Parent widget. If None, uses the default root window.
|
|
46
|
+
|
|
47
|
+
Other Parameters:
|
|
48
|
+
columns (list): Sequence of column identifiers.
|
|
49
|
+
displaycolumns (list | str): Subset and order of columns to display.
|
|
50
|
+
show (str): Which parts to display (e.g., 'tree', 'headings').
|
|
51
|
+
height (int): Number of rows to display.
|
|
52
|
+
padding (int | tuple): Extra padding around the widget.
|
|
53
|
+
selectmode (str): Selection mode ('browse', 'extended', 'none').
|
|
54
|
+
style (str): Explicit ttk style name.
|
|
55
|
+
surface (str): Optional surface token; otherwise inherited.
|
|
56
|
+
density (str): The compactness of widget content ('default' or 'compact').
|
|
57
|
+
border_color (str): The color of the border around the table.
|
|
58
|
+
show_border (bool): Whether to show a border around the table.
|
|
59
|
+
open_icon (str | dict): The icon used for open state.
|
|
60
|
+
close_icon (str | dict): The icon used for close state.
|
|
61
|
+
select_background (str): A semantic color token used to set selection background color.
|
|
62
|
+
header_background (str): A semantic color token used to set the header background color.
|
|
63
|
+
style_options (dict): Optional dict forwarded to the style builder.
|
|
64
|
+
"""
|
|
65
|
+
kwargs.update(style_options=self._capture_style_options([
|
|
66
|
+
'density',
|
|
67
|
+
'border_color',
|
|
68
|
+
'show_border',
|
|
69
|
+
'open_icon',
|
|
70
|
+
'close_icon',
|
|
71
|
+
'select_background',
|
|
72
|
+
'header_background'
|
|
73
|
+
],
|
|
74
|
+
kwargs))
|
|
75
|
+
super().__init__(master, **kwargs)
|
|
76
|
+
|
|
77
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""Common type aliases for bootstack widgets.
|
|
2
|
+
|
|
3
|
+
This module provides centralized type definitions used across all widget modules
|
|
4
|
+
to ensure consistency and reduce import boilerplate.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import tkinter
|
|
10
|
+
from typing import Any, Callable, Optional, Union
|
|
11
|
+
|
|
12
|
+
# Master widget type - used for the `master` parameter in all widget constructors
|
|
13
|
+
Master = Optional[tkinter.Misc]
|
|
14
|
+
|
|
15
|
+
# Callback types
|
|
16
|
+
EventCallback = Callable[[tkinter.Event], None]
|
|
17
|
+
CommandCallback = Callable[[], Any]
|
|
18
|
+
|
|
19
|
+
# Common parameter types
|
|
20
|
+
WidgetKwargs = dict[str, Any]
|