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,388 @@
|
|
|
1
|
+
"""Scrolled text widget with configurable scrollbars."""
|
|
2
|
+
import tkinter
|
|
3
|
+
from typing import Any, Literal, Optional
|
|
4
|
+
|
|
5
|
+
from bootstack.widgets.primitives.frame import Frame
|
|
6
|
+
from bootstack.widgets.mixins.configure_mixin import configure_delegate
|
|
7
|
+
from bootstack.widgets.primitives.scrollbar import Scrollbar
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ScrolledText(Frame):
|
|
11
|
+
"""A text widget with configurable scrollbars and mouse wheel support.
|
|
12
|
+
|
|
13
|
+
The ScrolledText widget provides a Text widget with scrollbars that can be
|
|
14
|
+
configured to appear always, never, on hover, or when scrolling. Full mouse
|
|
15
|
+
wheel support is included.
|
|
16
|
+
|
|
17
|
+
This widget delegates all Text methods to the internal text widget, so it
|
|
18
|
+
can be used just like a standard Text widget with additional scrolling
|
|
19
|
+
functionality.
|
|
20
|
+
|
|
21
|
+
Attributes:
|
|
22
|
+
vertical_scrollbar (Scrollbar): The vertical scrollbar widget.
|
|
23
|
+
horizontal_scrollbar (Scrollbar): The horizontal scrollbar widget.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(
|
|
27
|
+
self,
|
|
28
|
+
master: Optional[tkinter.Misc] = None,
|
|
29
|
+
padding: int = 0,
|
|
30
|
+
scroll_direction: Literal['horizontal', 'vertical', 'both'] = 'vertical',
|
|
31
|
+
scrollbar_visibility: Literal['always', 'never', 'hover', 'scroll'] = 'always',
|
|
32
|
+
autohide_delay: int = 1000,
|
|
33
|
+
scrollbar_style: str = 'default',
|
|
34
|
+
**kwargs: Any,
|
|
35
|
+
) -> None:
|
|
36
|
+
"""Initialize a ScrolledText widget.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
master: The parent widget.
|
|
40
|
+
padding: Padding around the frame container.
|
|
41
|
+
scroll_direction: Scroll direction - 'vertical', 'horizontal', or 'both'.
|
|
42
|
+
Use 'both' to enable horizontal scrolling with Shift+MouseWheel.
|
|
43
|
+
scrollbar_visibility: Scrollbar visibility mode:
|
|
44
|
+
- 'always': Scrollbars always visible
|
|
45
|
+
- 'never': Scrollbars hidden (scrolling still works)
|
|
46
|
+
- 'hover': Scrollbars appear when mouse enters
|
|
47
|
+
- 'scroll': Scrollbars appear when scrolling, auto-hide after delay
|
|
48
|
+
autohide_delay: Time in milliseconds before auto-hiding scrollbars
|
|
49
|
+
in 'scroll' mode.
|
|
50
|
+
scrollbar_style: The bootstyle for scrollbars (e.g., 'primary',
|
|
51
|
+
'success', 'danger').
|
|
52
|
+
**kwargs: Additional keyword arguments passed to the Text widget.
|
|
53
|
+
|
|
54
|
+
Note:
|
|
55
|
+
Legacy parameters 'autohide', 'vbar', and 'hbar' parameters work, but are deprecated. Use
|
|
56
|
+
`scroll_direction` and `scrollbar_visibility` instead.
|
|
57
|
+
"""
|
|
58
|
+
# Handle deprecated parameters
|
|
59
|
+
autohide = kwargs.pop('autohide', None)
|
|
60
|
+
if autohide is not None:
|
|
61
|
+
scrollbar_visibility = 'hover' if autohide else 'always'
|
|
62
|
+
|
|
63
|
+
vbar = kwargs.pop('vbar', None)
|
|
64
|
+
hbar = kwargs.pop('hbar', None)
|
|
65
|
+
if vbar is not None or hbar is not None:
|
|
66
|
+
# Determine direction from vbar/hbar
|
|
67
|
+
if hbar and vbar:
|
|
68
|
+
scroll_direction = 'both'
|
|
69
|
+
elif hbar:
|
|
70
|
+
scroll_direction = 'horizontal'
|
|
71
|
+
elif vbar:
|
|
72
|
+
scroll_direction = 'vertical'
|
|
73
|
+
else:
|
|
74
|
+
scroll_direction = 'vertical' # Default
|
|
75
|
+
|
|
76
|
+
# Initialize Frame
|
|
77
|
+
super().__init__(master=master, padding=padding)
|
|
78
|
+
|
|
79
|
+
# Configuration
|
|
80
|
+
self._direction = scroll_direction
|
|
81
|
+
self._scrollbar_visibility = scrollbar_visibility
|
|
82
|
+
self._autohide_delay = autohide_delay
|
|
83
|
+
self._scrollbar_style = scrollbar_style
|
|
84
|
+
self._hide_timer = None
|
|
85
|
+
|
|
86
|
+
# Create unique bind tag for this scrolledtext
|
|
87
|
+
self._scroll_tag = f'ScrolledText_{id(self)}'
|
|
88
|
+
|
|
89
|
+
# Detect windowing system
|
|
90
|
+
self.winsys = self.tk.call("tk", "windowingsystem")
|
|
91
|
+
|
|
92
|
+
# Bind scroll events to our custom tag
|
|
93
|
+
self._setup_scroll_tag_bindings()
|
|
94
|
+
|
|
95
|
+
# Create text widget
|
|
96
|
+
text_kwargs = kwargs.copy()
|
|
97
|
+
|
|
98
|
+
# Set wrap mode based on direction
|
|
99
|
+
if scroll_direction == 'both' or scroll_direction == 'horizontal':
|
|
100
|
+
if 'wrap' not in text_kwargs:
|
|
101
|
+
text_kwargs['wrap'] = 'none'
|
|
102
|
+
|
|
103
|
+
self._text = tkinter.Text(self, **text_kwargs)
|
|
104
|
+
|
|
105
|
+
# Create scrollbars
|
|
106
|
+
self.vertical_scrollbar = Scrollbar(
|
|
107
|
+
master=self,
|
|
108
|
+
orient='vertical',
|
|
109
|
+
command=self._text.yview,
|
|
110
|
+
accent=scrollbar_style if scrollbar_style != 'default' else None
|
|
111
|
+
)
|
|
112
|
+
self.horizontal_scrollbar = Scrollbar(
|
|
113
|
+
master=self,
|
|
114
|
+
orient='horizontal',
|
|
115
|
+
command=self._text.xview,
|
|
116
|
+
accent=scrollbar_style if scrollbar_style != 'default' else None
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# Configure text scrolling
|
|
120
|
+
if scroll_direction in ('vertical', 'both'):
|
|
121
|
+
self._text.configure(yscrollcommand=self._on_text_scroll_y)
|
|
122
|
+
if scroll_direction in ('horizontal', 'both'):
|
|
123
|
+
self._text.configure(xscrollcommand=self._on_text_scroll_x)
|
|
124
|
+
|
|
125
|
+
# Layout
|
|
126
|
+
self._layout_widgets()
|
|
127
|
+
|
|
128
|
+
# Bind events for autohide/hover
|
|
129
|
+
self._bind_container_events()
|
|
130
|
+
|
|
131
|
+
# Initial scrollbar visibility
|
|
132
|
+
self._update_scrollbar_visibility()
|
|
133
|
+
|
|
134
|
+
# Add scroll bindings to text widget
|
|
135
|
+
self._add_scroll_binding(self._text)
|
|
136
|
+
|
|
137
|
+
# Delegate text methods to this widget (except geometry managers)
|
|
138
|
+
for method in vars(tkinter.Text).keys():
|
|
139
|
+
if any(["pack" in method, "grid" in method, "place" in method]):
|
|
140
|
+
pass
|
|
141
|
+
else:
|
|
142
|
+
# Don't override methods that already exist
|
|
143
|
+
if not hasattr(self, method):
|
|
144
|
+
setattr(self, method, getattr(self._text, method))
|
|
145
|
+
|
|
146
|
+
@configure_delegate('scroll_direction')
|
|
147
|
+
def _delegate_scroll_direction(self, value=None):
|
|
148
|
+
if value is None:
|
|
149
|
+
return self._direction
|
|
150
|
+
else:
|
|
151
|
+
self._direction = value
|
|
152
|
+
# Update scrollbar visibility and layout
|
|
153
|
+
self._update_scrollbar_visibility()
|
|
154
|
+
return None
|
|
155
|
+
|
|
156
|
+
@configure_delegate('scrollbar_visibility')
|
|
157
|
+
def _delegate_scrollbar_visibility(self, value=None):
|
|
158
|
+
if value is None:
|
|
159
|
+
return self._scrollbar_visibility
|
|
160
|
+
else:
|
|
161
|
+
old_value = self._scrollbar_visibility
|
|
162
|
+
self._scrollbar_visibility = value
|
|
163
|
+
|
|
164
|
+
# Unbind old events if changing from hover
|
|
165
|
+
if old_value == 'hover':
|
|
166
|
+
self.unbind('<Enter>')
|
|
167
|
+
self.unbind('<Leave>')
|
|
168
|
+
self._text.unbind('<Enter>')
|
|
169
|
+
self._text.unbind('<Leave>')
|
|
170
|
+
self.vertical_scrollbar.unbind('<Enter>')
|
|
171
|
+
self.vertical_scrollbar.unbind('<Leave>')
|
|
172
|
+
self.horizontal_scrollbar.unbind('<Enter>')
|
|
173
|
+
self.horizontal_scrollbar.unbind('<Leave>')
|
|
174
|
+
|
|
175
|
+
# Bind new events and update scrollbar visibility
|
|
176
|
+
self._bind_container_events()
|
|
177
|
+
self._update_scrollbar_visibility()
|
|
178
|
+
return None
|
|
179
|
+
|
|
180
|
+
@configure_delegate('autohide_delay')
|
|
181
|
+
def _delegate_autohide_delay(self, value=None):
|
|
182
|
+
if value is None:
|
|
183
|
+
return self._autohide_delay
|
|
184
|
+
else:
|
|
185
|
+
self._autohide_delay = value
|
|
186
|
+
return None
|
|
187
|
+
|
|
188
|
+
@configure_delegate('scrollbar_style')
|
|
189
|
+
def _delegate_scrollbar_style(self, value=None):
|
|
190
|
+
if value is None:
|
|
191
|
+
return self._scrollbar_style
|
|
192
|
+
else:
|
|
193
|
+
self._scrollbar_style = value
|
|
194
|
+
# Apply the new accent to both scrollbars
|
|
195
|
+
if value and value != 'default':
|
|
196
|
+
self.vertical_scrollbar.configure(accent=value)
|
|
197
|
+
self.horizontal_scrollbar.configure(accent=value)
|
|
198
|
+
return None
|
|
199
|
+
|
|
200
|
+
def _setup_scroll_tag_bindings(self):
|
|
201
|
+
"""Setup bindings on our custom bind tag."""
|
|
202
|
+
if self.winsys.lower() == "x11":
|
|
203
|
+
self.bind_class(self._scroll_tag, "<Button-4>", self._on_mousewheel)
|
|
204
|
+
self.bind_class(self._scroll_tag, "<Button-5>", self._on_mousewheel)
|
|
205
|
+
self.bind_class(self._scroll_tag, "<Shift-Button-4>", self._on_shift_mousewheel)
|
|
206
|
+
self.bind_class(self._scroll_tag, "<Shift-Button-5>", self._on_shift_mousewheel)
|
|
207
|
+
else:
|
|
208
|
+
self.bind_class(self._scroll_tag, "<MouseWheel>", self._on_mousewheel)
|
|
209
|
+
self.bind_class(self._scroll_tag, "<Shift-MouseWheel>", self._on_shift_mousewheel)
|
|
210
|
+
|
|
211
|
+
def _layout_widgets(self):
|
|
212
|
+
"""Layout the text widget and scrollbars."""
|
|
213
|
+
self._text.grid(row=0, column=0, sticky='nsew')
|
|
214
|
+
|
|
215
|
+
if self._direction in ('vertical', 'both'):
|
|
216
|
+
self.vertical_scrollbar.grid(row=0, column=1, sticky='ns')
|
|
217
|
+
|
|
218
|
+
if self._direction in ('horizontal', 'both'):
|
|
219
|
+
self.horizontal_scrollbar.grid(row=1, column=0, sticky='ew')
|
|
220
|
+
|
|
221
|
+
# Configure grid weights
|
|
222
|
+
self.grid_rowconfigure(0, weight=1)
|
|
223
|
+
self.grid_columnconfigure(0, weight=1)
|
|
224
|
+
|
|
225
|
+
# Initially hide scrollbars based on scrollbar_visibility setting
|
|
226
|
+
if self._scrollbar_visibility == 'never':
|
|
227
|
+
self.vertical_scrollbar.grid_remove()
|
|
228
|
+
self.horizontal_scrollbar.grid_remove()
|
|
229
|
+
elif self._scrollbar_visibility in ('hover', 'scroll'):
|
|
230
|
+
self.vertical_scrollbar.grid_remove()
|
|
231
|
+
self.horizontal_scrollbar.grid_remove()
|
|
232
|
+
|
|
233
|
+
def _bind_container_events(self):
|
|
234
|
+
"""Bind events for the container (enter/leave for autohide)."""
|
|
235
|
+
if self._scrollbar_visibility == 'hover':
|
|
236
|
+
self.bind('<Enter>', self._on_container_enter)
|
|
237
|
+
self.bind('<Leave>', self._on_container_leave)
|
|
238
|
+
self._text.bind('<Enter>', self._on_container_enter)
|
|
239
|
+
self._text.bind('<Leave>', self._on_container_leave)
|
|
240
|
+
self.vertical_scrollbar.bind('<Enter>', self._on_container_enter)
|
|
241
|
+
self.vertical_scrollbar.bind('<Leave>', self._on_container_leave)
|
|
242
|
+
self.horizontal_scrollbar.bind('<Enter>', self._on_container_enter)
|
|
243
|
+
self.horizontal_scrollbar.bind('<Leave>', self._on_container_leave)
|
|
244
|
+
|
|
245
|
+
def _on_container_enter(self, event):
|
|
246
|
+
"""Handle mouse entering the container."""
|
|
247
|
+
if self._scrollbar_visibility == 'hover':
|
|
248
|
+
self._show_scrollbars()
|
|
249
|
+
|
|
250
|
+
def _on_container_leave(self, event):
|
|
251
|
+
"""Handle mouse leaving the container."""
|
|
252
|
+
if self._scrollbar_visibility == 'hover':
|
|
253
|
+
self._hide_scrollbars()
|
|
254
|
+
|
|
255
|
+
def _show_scrollbars(self):
|
|
256
|
+
"""Show scrollbars."""
|
|
257
|
+
if self._direction in ('vertical', 'both'):
|
|
258
|
+
self.vertical_scrollbar.grid()
|
|
259
|
+
if self._direction in ('horizontal', 'both'):
|
|
260
|
+
self.horizontal_scrollbar.grid()
|
|
261
|
+
|
|
262
|
+
def _hide_scrollbars(self):
|
|
263
|
+
"""Hide scrollbars."""
|
|
264
|
+
self.vertical_scrollbar.grid_remove()
|
|
265
|
+
self.horizontal_scrollbar.grid_remove()
|
|
266
|
+
|
|
267
|
+
def _on_text_scroll_y(self, first, last):
|
|
268
|
+
"""Update vertical scrollbar position."""
|
|
269
|
+
self.vertical_scrollbar.set(first, last)
|
|
270
|
+
|
|
271
|
+
def _on_text_scroll_x(self, first, last):
|
|
272
|
+
"""Update horizontal scrollbar position."""
|
|
273
|
+
self.horizontal_scrollbar.set(first, last)
|
|
274
|
+
|
|
275
|
+
def _update_scrollbar_visibility(self):
|
|
276
|
+
"""Update scrollbar visibility based on current mode."""
|
|
277
|
+
if self._scrollbar_visibility == 'always':
|
|
278
|
+
self._show_scrollbars()
|
|
279
|
+
elif self._scrollbar_visibility == 'never':
|
|
280
|
+
self._hide_scrollbars()
|
|
281
|
+
|
|
282
|
+
def _on_mousewheel(self, event):
|
|
283
|
+
"""Handle vertical mouse wheel scrolling."""
|
|
284
|
+
# Show scrollbar temporarily in scroll mode
|
|
285
|
+
if self._scrollbar_visibility == 'scroll':
|
|
286
|
+
self._show_scrollbars()
|
|
287
|
+
if self._hide_timer:
|
|
288
|
+
self.after_cancel(self._hide_timer)
|
|
289
|
+
self._hide_timer = self.after(self._autohide_delay, self._hide_scrollbars)
|
|
290
|
+
|
|
291
|
+
# Calculate delta based on platform
|
|
292
|
+
delta = 0
|
|
293
|
+
if self.winsys.lower() == "win32":
|
|
294
|
+
delta = -int(event.delta / 120)
|
|
295
|
+
elif self.winsys.lower() == "aqua":
|
|
296
|
+
delta = -event.delta
|
|
297
|
+
elif event.num == 4:
|
|
298
|
+
delta = -1
|
|
299
|
+
elif event.num == 5:
|
|
300
|
+
delta = 1
|
|
301
|
+
|
|
302
|
+
# Scroll vertically
|
|
303
|
+
if self._direction in ('vertical', 'both') and delta != 0:
|
|
304
|
+
self._text.yview_scroll(delta, 'units')
|
|
305
|
+
|
|
306
|
+
def _on_shift_mousewheel(self, event):
|
|
307
|
+
"""Handle horizontal mouse wheel scrolling (Shift+MouseWheel)."""
|
|
308
|
+
# Show scrollbar temporarily in scroll mode
|
|
309
|
+
if self._scrollbar_visibility == 'scroll':
|
|
310
|
+
self._show_scrollbars()
|
|
311
|
+
if self._hide_timer:
|
|
312
|
+
self.after_cancel(self._hide_timer)
|
|
313
|
+
self._hide_timer = self.after(self._autohide_delay, self._hide_scrollbars)
|
|
314
|
+
|
|
315
|
+
# Calculate delta based on platform
|
|
316
|
+
delta = 0
|
|
317
|
+
if self.winsys.lower() == "win32":
|
|
318
|
+
delta = -int(event.delta / 120)
|
|
319
|
+
elif self.winsys.lower() == "aqua":
|
|
320
|
+
delta = -event.delta
|
|
321
|
+
elif event.num == 4:
|
|
322
|
+
delta = -1
|
|
323
|
+
elif event.num == 5:
|
|
324
|
+
delta = 1
|
|
325
|
+
|
|
326
|
+
# Scroll horizontally
|
|
327
|
+
if self._direction in ('horizontal', 'both') and delta != 0:
|
|
328
|
+
self._text.xview_scroll(delta, 'units')
|
|
329
|
+
|
|
330
|
+
def _add_scroll_binding(self, widget):
|
|
331
|
+
"""Add scroll bind tag to widget."""
|
|
332
|
+
try:
|
|
333
|
+
tags = list(widget.bindtags())
|
|
334
|
+
if self._scroll_tag not in tags:
|
|
335
|
+
if len(tags) >= 2:
|
|
336
|
+
tags.insert(1, self._scroll_tag)
|
|
337
|
+
else:
|
|
338
|
+
tags.append(self._scroll_tag)
|
|
339
|
+
widget.bindtags(tuple(tags))
|
|
340
|
+
except:
|
|
341
|
+
pass
|
|
342
|
+
|
|
343
|
+
def destroy(self):
|
|
344
|
+
"""Clean up resources and destroy the widget."""
|
|
345
|
+
# Cancel any pending timer
|
|
346
|
+
if self._hide_timer:
|
|
347
|
+
self.after_cancel(self._hide_timer)
|
|
348
|
+
self._hide_timer = None
|
|
349
|
+
|
|
350
|
+
# Unbind class bindings for the scroll tag
|
|
351
|
+
if self.winsys.lower() == "x11":
|
|
352
|
+
self.unbind_class(self._scroll_tag, "<Button-4>")
|
|
353
|
+
self.unbind_class(self._scroll_tag, "<Button-5>")
|
|
354
|
+
self.unbind_class(self._scroll_tag, "<Shift-Button-4>")
|
|
355
|
+
self.unbind_class(self._scroll_tag, "<Shift-Button-5>")
|
|
356
|
+
else:
|
|
357
|
+
self.unbind_class(self._scroll_tag, "<MouseWheel>")
|
|
358
|
+
self.unbind_class(self._scroll_tag, "<Shift-MouseWheel>")
|
|
359
|
+
|
|
360
|
+
# Call parent destroy
|
|
361
|
+
super().destroy()
|
|
362
|
+
|
|
363
|
+
def __getattr__(self, name: str) -> Any:
|
|
364
|
+
"""Delegate unknown attribute access to the internal Text widget.
|
|
365
|
+
|
|
366
|
+
Args:
|
|
367
|
+
name: The attribute name to access.
|
|
368
|
+
|
|
369
|
+
Returns:
|
|
370
|
+
The attribute from the internal Text widget.
|
|
371
|
+
|
|
372
|
+
Raises:
|
|
373
|
+
AttributeError: If _text doesn't exist yet or doesn't have the attribute.
|
|
374
|
+
"""
|
|
375
|
+
# Avoid infinite recursion during initialization
|
|
376
|
+
if '_text' not in self.__dict__:
|
|
377
|
+
raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'")
|
|
378
|
+
return getattr(self._text, name)
|
|
379
|
+
|
|
380
|
+
@property
|
|
381
|
+
def text(self):
|
|
382
|
+
"""Get the internal text widget.
|
|
383
|
+
|
|
384
|
+
Returns:
|
|
385
|
+
The underlying Text widget instance.
|
|
386
|
+
"""
|
|
387
|
+
return self._text
|
|
388
|
+
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"""Type stubs for the composite ScrolledText widget."""
|
|
2
|
+
import tkinter
|
|
3
|
+
from typing import Any, Literal, Optional, Tuple, overload
|
|
4
|
+
|
|
5
|
+
from ttkbootstrap.widgets.primitives.frame import Frame
|
|
6
|
+
from ttkbootstrap.widgets.primitives.scrollbar import Scrollbar
|
|
7
|
+
|
|
8
|
+
_TextIndex = str | float
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ScrolledText(Frame):
|
|
12
|
+
"""A text widget with configurable scrollbars and mouse wheel support."""
|
|
13
|
+
|
|
14
|
+
vertical_scrollbar: Scrollbar
|
|
15
|
+
horizontal_scrollbar: Scrollbar
|
|
16
|
+
|
|
17
|
+
def __init__(
|
|
18
|
+
self,
|
|
19
|
+
master: Optional[tkinter.Misc] = None,
|
|
20
|
+
padding: int = 0,
|
|
21
|
+
scroll_direction: Literal['horizontal', 'vertical', 'both'] = 'vertical',
|
|
22
|
+
scrollbar_visibility: Literal['always', 'never', 'hover', 'scroll'] = 'always',
|
|
23
|
+
autohide_delay: int = 1000,
|
|
24
|
+
scrollbar_style: str = 'default',
|
|
25
|
+
**kwargs: Any,
|
|
26
|
+
) -> None:
|
|
27
|
+
self._text: tkinter.Text = None
|
|
28
|
+
...
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def text(self) -> tkinter.Text: ...
|
|
32
|
+
|
|
33
|
+
def delete(self, index1: _TextIndex, index2: Optional[_TextIndex] = None) -> None: ...
|
|
34
|
+
|
|
35
|
+
@overload
|
|
36
|
+
def get(self, index1: _TextIndex, index2: None = None) -> str: ...
|
|
37
|
+
|
|
38
|
+
@overload
|
|
39
|
+
def get(self, index1: _TextIndex, index2: _TextIndex) -> str: ...
|
|
40
|
+
|
|
41
|
+
def insert(self, index: _TextIndex, chars: str, *args: str | Tuple[str, ...]) -> None: ...
|
|
42
|
+
|
|
43
|
+
def replace(self, index1: _TextIndex, index2: _TextIndex, chars: str, *args: str | Tuple[str, ...]) -> None: ...
|
|
44
|
+
|
|
45
|
+
def index(self, index: _TextIndex) -> str: ...
|
|
46
|
+
|
|
47
|
+
def see(self, index: _TextIndex) -> None: ...
|
|
48
|
+
|
|
49
|
+
def compare(
|
|
50
|
+
self, index1: _TextIndex, op: Literal['<', '<=', '==', '>=', '>', '!='], index2: _TextIndex) -> bool: ...
|
|
51
|
+
|
|
52
|
+
def bbox(self, index: _TextIndex) -> Optional[Tuple[int, int, int, int]]: ...
|
|
53
|
+
|
|
54
|
+
def dlineinfo(self, index: _TextIndex) -> Optional[Tuple[int, int, int, int, int]]: ...
|
|
55
|
+
|
|
56
|
+
def search(
|
|
57
|
+
self,
|
|
58
|
+
pattern: str,
|
|
59
|
+
index: _TextIndex,
|
|
60
|
+
stopindex: Optional[_TextIndex] = None,
|
|
61
|
+
forwards: Optional[bool] = None,
|
|
62
|
+
backwards: Optional[bool] = None,
|
|
63
|
+
exact: Optional[bool] = None,
|
|
64
|
+
regexp: Optional[bool] = None,
|
|
65
|
+
nocase: Optional[bool] = None,
|
|
66
|
+
count: Optional[tkinter.Variable] = None,
|
|
67
|
+
elide: Optional[bool] = None,
|
|
68
|
+
) -> str: ...
|
|
69
|
+
|
|
70
|
+
def mark_gravity(self, markName: str, direction: Optional[Literal['left', 'right']] = None) -> Optional[
|
|
71
|
+
Literal['left', 'right']]: ...
|
|
72
|
+
|
|
73
|
+
def mark_names(self) -> Tuple[str, ...]: ...
|
|
74
|
+
|
|
75
|
+
def mark_set(self, markName: str, index: _TextIndex) -> None: ...
|
|
76
|
+
|
|
77
|
+
def mark_unset(self, *markNames: str) -> None: ...
|
|
78
|
+
|
|
79
|
+
def mark_next(self, index: _TextIndex) -> Optional[str]: ...
|
|
80
|
+
|
|
81
|
+
def mark_previous(self, index: _TextIndex) -> Optional[str]: ...
|
|
82
|
+
|
|
83
|
+
def tag_add(self, tagName: str, index1: _TextIndex, *args: _TextIndex) -> None: ...
|
|
84
|
+
|
|
85
|
+
def tag_unbind(self, tagName: str, sequence: str, funcid: Optional[str] = None) -> None: ...
|
|
86
|
+
|
|
87
|
+
def tag_bind(
|
|
88
|
+
self, tagName: str, sequence: Optional[str], func: Optional[Any], add: Optional[bool] = None) -> str: ...
|
|
89
|
+
|
|
90
|
+
def tag_cget(self, tagName: str, option: str) -> Any: ...
|
|
91
|
+
|
|
92
|
+
def tag_configure(self, tagName: str, cnf: Optional[dict[str, Any]] = None, **kw: Any) -> Optional[Any]: ...
|
|
93
|
+
|
|
94
|
+
tag_config = tag_configure
|
|
95
|
+
|
|
96
|
+
def tag_delete(self, *tagNames: str) -> None: ...
|
|
97
|
+
|
|
98
|
+
def tag_lower(self, tagName: str, belowThis: Optional[str] = None) -> None: ...
|
|
99
|
+
|
|
100
|
+
def tag_names(self, index: Optional[_TextIndex] = None) -> Tuple[str, ...]: ...
|
|
101
|
+
|
|
102
|
+
def tag_nextrange(self, tagName: str, index1: _TextIndex, index2: Optional[_TextIndex] = None) -> Tuple[
|
|
103
|
+
str, ...]: ...
|
|
104
|
+
|
|
105
|
+
def tag_prevrange(self, tagName: str, index1: _TextIndex, index2: Optional[_TextIndex] = None) -> Tuple[
|
|
106
|
+
str, ...]: ...
|
|
107
|
+
|
|
108
|
+
def tag_raise(self, tagName: str, aboveThis: Optional[str] = None) -> None: ...
|
|
109
|
+
|
|
110
|
+
def tag_ranges(self, tagName: str) -> Tuple[str, ...]: ...
|
|
111
|
+
|
|
112
|
+
def tag_remove(self, tagName: str, index1: _TextIndex, index2: Optional[_TextIndex] = None) -> None: ...
|
|
113
|
+
|
|
114
|
+
def edit_modified(self, arg: Optional[bool] = None) -> Optional[bool]: ...
|
|
115
|
+
|
|
116
|
+
def edit_redo(self) -> None: ...
|
|
117
|
+
|
|
118
|
+
def edit_reset(self) -> None: ...
|
|
119
|
+
|
|
120
|
+
def edit_separator(self) -> None: ...
|
|
121
|
+
|
|
122
|
+
def edit_undo(self) -> None: ...
|
|
123
|
+
|
|
124
|
+
def image_cget(self, index: _TextIndex, option: str) -> Any: ...
|
|
125
|
+
|
|
126
|
+
def image_configure(self, index: _TextIndex, cnf: Optional[dict[str, Any]] = None, **kw: Any) -> Optional[Any]: ...
|
|
127
|
+
|
|
128
|
+
def image_create(
|
|
129
|
+
self,
|
|
130
|
+
index: _TextIndex,
|
|
131
|
+
cnf: dict[str, Any] = ...,
|
|
132
|
+
**kw: Any,
|
|
133
|
+
) -> str: ...
|
|
134
|
+
|
|
135
|
+
def image_names(self) -> Tuple[str, ...]: ...
|
|
136
|
+
|
|
137
|
+
def window_cget(self, index: _TextIndex, option: str) -> Any: ...
|
|
138
|
+
|
|
139
|
+
def window_configure(self, index: _TextIndex, cnf: Optional[dict[str, Any]] = None, **kw: Any) -> Optional[Any]: ...
|
|
140
|
+
|
|
141
|
+
def window_create(
|
|
142
|
+
self,
|
|
143
|
+
index: _TextIndex,
|
|
144
|
+
cnf: dict[str, Any] = ...,
|
|
145
|
+
**kw: Any,
|
|
146
|
+
) -> str: ...
|
|
147
|
+
|
|
148
|
+
def window_names(self) -> Tuple[str, ...]: ...
|
|
149
|
+
|
|
150
|
+
def dump(
|
|
151
|
+
self,
|
|
152
|
+
index1: _TextIndex,
|
|
153
|
+
index2: Optional[_TextIndex] = None,
|
|
154
|
+
command: Optional[Any] = None,
|
|
155
|
+
**kw: Any,
|
|
156
|
+
) -> list[Tuple[str, str, str]] | None: ...
|
|
157
|
+
|
|
158
|
+
def peer_create(self, newPathName: str | tkinter.Text, cnf: dict[str, Any] = {}, **kw: Any) -> None: ...
|
|
159
|
+
|
|
160
|
+
def peer_names(self) -> Tuple[tkinter.Text, ...]: ...
|
|
161
|
+
|
|
162
|
+
def count(self, index1: _TextIndex, index2: _TextIndex, *options: str) -> Optional[int | Tuple[int, ...]]: ...
|
|
163
|
+
|
|
164
|
+
def scan_mark(self, x: int, y: int) -> None: ...
|
|
165
|
+
|
|
166
|
+
def scan_dragto(self, x: int, y: int) -> None: ...
|
|
167
|
+
|
|
168
|
+
def yview_moveto(self, fraction: float) -> None: ...
|
|
169
|
+
|
|
170
|
+
def yview_scroll(self, number: int, what: Literal['units', 'pages']) -> None: ...
|
|
171
|
+
|
|
172
|
+
@overload
|
|
173
|
+
def yview(self) -> Tuple[float, float]: ...
|
|
174
|
+
|
|
175
|
+
@overload
|
|
176
|
+
def yview(self, *args: Any) -> None: ...
|
|
177
|
+
|
|
178
|
+
def xview_moveto(self, fraction: float) -> None: ...
|
|
179
|
+
|
|
180
|
+
def xview_scroll(self, number: int, what: Literal['units', 'pages']) -> None: ...
|
|
181
|
+
|
|
182
|
+
@overload
|
|
183
|
+
def xview(self) -> Tuple[float, float]: ...
|
|
184
|
+
|
|
185
|
+
@overload
|
|
186
|
+
def xview(self, *args: Any) -> None: ...
|