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.
Files changed (419) hide show
  1. bootstack/__init__.py +249 -0
  2. bootstack/__main__.py +5 -0
  3. bootstack/api/__init__.py +127 -0
  4. bootstack/api/app.py +30 -0
  5. bootstack/api/constants.py +3 -0
  6. bootstack/api/data.py +23 -0
  7. bootstack/api/dialogs.py +44 -0
  8. bootstack/api/i18n.py +17 -0
  9. bootstack/api/localization.py +16 -0
  10. bootstack/api/menu.py +7 -0
  11. bootstack/api/style.py +23 -0
  12. bootstack/api/utils.py +24 -0
  13. bootstack/api/widgets.py +137 -0
  14. bootstack/assets/__init__.py +24 -0
  15. bootstack/assets/bootstack-transparent.png +0 -0
  16. bootstack/assets/bootstack.ico +0 -0
  17. bootstack/assets/bootstack.png +0 -0
  18. bootstack/assets/elements/__init__.py +0 -0
  19. bootstack/assets/elements/badge-pill.png +0 -0
  20. bootstack/assets/elements/badge-square.png +0 -0
  21. bootstack/assets/elements/border.png +0 -0
  22. bootstack/assets/elements/button-compact.png +0 -0
  23. bootstack/assets/elements/button-default.png +0 -0
  24. bootstack/assets/elements/button-group-horizontal-after-compact.png +0 -0
  25. bootstack/assets/elements/button-group-horizontal-after-default.png +0 -0
  26. bootstack/assets/elements/button-group-horizontal-before-compact.png +0 -0
  27. bootstack/assets/elements/button-group-horizontal-before-default.png +0 -0
  28. bootstack/assets/elements/button-group-horizontal-center-compact.png +0 -0
  29. bootstack/assets/elements/button-group-horizontal-center-default.png +0 -0
  30. bootstack/assets/elements/button-group-vertical-after-compact.png +0 -0
  31. bootstack/assets/elements/button-group-vertical-after-default.png +0 -0
  32. bootstack/assets/elements/button-group-vertical-before-compact.png +0 -0
  33. bootstack/assets/elements/button-group-vertical-before-default.png +0 -0
  34. bootstack/assets/elements/button-group-vertical-center-compact.png +0 -0
  35. bootstack/assets/elements/button-group-vertical-center-default.png +0 -0
  36. bootstack/assets/elements/checkbox-checked.png +0 -0
  37. bootstack/assets/elements/checkbox-indeterminate.png +0 -0
  38. bootstack/assets/elements/checkbox-unchecked.png +0 -0
  39. bootstack/assets/elements/field.png +0 -0
  40. bootstack/assets/elements/input-after-compact.png +0 -0
  41. bootstack/assets/elements/input-after-default.png +0 -0
  42. bootstack/assets/elements/input-before-compact.png +0 -0
  43. bootstack/assets/elements/input-before-default.png +0 -0
  44. bootstack/assets/elements/input-compact.png +0 -0
  45. bootstack/assets/elements/input-default.png +0 -0
  46. bootstack/assets/elements/list-item-separated.png +0 -0
  47. bootstack/assets/elements/list-item.png +0 -0
  48. bootstack/assets/elements/manifest.toml +480 -0
  49. bootstack/assets/elements/menu-item.png +0 -0
  50. bootstack/assets/elements/nav-button-compact.png +0 -0
  51. bootstack/assets/elements/nav-button-default.png +0 -0
  52. bootstack/assets/elements/nav-icon-button-compact.png +0 -0
  53. bootstack/assets/elements/nav-icon-button-default.png +0 -0
  54. bootstack/assets/elements/notebook-client-border.png +0 -0
  55. bootstack/assets/elements/notebook-tab-active.png +0 -0
  56. bootstack/assets/elements/notebook-tab-bar.png +0 -0
  57. bootstack/assets/elements/notebook-tab-normal.png +0 -0
  58. bootstack/assets/elements/notebook-tab-pill.png +0 -0
  59. bootstack/assets/elements/progress-bar-horizontal-striped.png +0 -0
  60. bootstack/assets/elements/progress-bar-solid.png +0 -0
  61. bootstack/assets/elements/progress-bar-thin.png +0 -0
  62. bootstack/assets/elements/progress-bar-vertical-striped.png +0 -0
  63. bootstack/assets/elements/radio-selected.png +0 -0
  64. bootstack/assets/elements/radio-unselected.png +0 -0
  65. bootstack/assets/elements/scrollbar-horizontal.png +0 -0
  66. bootstack/assets/elements/scrollbar-vertical.png +0 -0
  67. bootstack/assets/elements/slider-handle-focus.png +0 -0
  68. bootstack/assets/elements/slider-handle.png +0 -0
  69. bootstack/assets/elements/slider-track-horizontal.png +0 -0
  70. bootstack/assets/elements/slider-track-vertical.png +0 -0
  71. bootstack/assets/elements/switch-off.png +0 -0
  72. bootstack/assets/elements/switch-on.png +0 -0
  73. bootstack/assets/elements/tabs-bar-horizontal.png +0 -0
  74. bootstack/assets/elements/tabs-bar-vertical.png +0 -0
  75. bootstack/assets/elements/tabs-pill.png +0 -0
  76. bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
  77. bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +853 -0
  78. bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +875 -0
  79. bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
  80. bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +853 -0
  81. bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
  82. bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +853 -0
  83. bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
  84. bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +853 -0
  85. bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
  86. bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +875 -0
  87. bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
  88. bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +853 -0
  89. bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
  90. bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +853 -0
  91. bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
  92. bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +851 -0
  93. bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
  94. bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +842 -0
  95. bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
  96. bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +841 -0
  97. bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
  98. bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +914 -0
  99. bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
  100. bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +842 -0
  101. bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
  102. bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +841 -0
  103. bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
  104. bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +841 -0
  105. bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
  106. bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +842 -0
  107. bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
  108. bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +842 -0
  109. bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
  110. bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +842 -0
  111. bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
  112. bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +842 -0
  113. bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
  114. bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +842 -0
  115. bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
  116. bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +842 -0
  117. bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
  118. bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +842 -0
  119. bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
  120. bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +842 -0
  121. bootstack/assets/themes/__init__.py +0 -0
  122. bootstack/assets/themes/amber-dark.json +32 -0
  123. bootstack/assets/themes/amber-light.json +32 -0
  124. bootstack/assets/themes/aurora-dark.json +32 -0
  125. bootstack/assets/themes/aurora-light.json +32 -0
  126. bootstack/assets/themes/bootstrap-dark.json +32 -0
  127. bootstack/assets/themes/bootstrap-light.json +32 -0
  128. bootstack/assets/themes/classic-dark.json +32 -0
  129. bootstack/assets/themes/classic-light.json +32 -0
  130. bootstack/assets/themes/docs-dark.json +32 -0
  131. bootstack/assets/themes/docs-light.json +32 -0
  132. bootstack/assets/themes/forest-dark.json +32 -0
  133. bootstack/assets/themes/forest-light.json +32 -0
  134. bootstack/assets/themes/ocean-dark.json +32 -0
  135. bootstack/assets/themes/ocean-light.json +32 -0
  136. bootstack/assets/themes/rose-dark.json +32 -0
  137. bootstack/assets/themes/rose-light.json +32 -0
  138. bootstack/assets/widgets/__init__.py +0 -0
  139. bootstack/assets/widgets/badge-default.png +0 -0
  140. bootstack/assets/widgets/badge-pill.png +0 -0
  141. bootstack/assets/widgets/border.png +0 -0
  142. bootstack/assets/widgets/button-group-horizontal-after.png +0 -0
  143. bootstack/assets/widgets/button-group-horizontal-before.png +0 -0
  144. bootstack/assets/widgets/button-group-horizontal-center.png +0 -0
  145. bootstack/assets/widgets/button-group-vertical-after.png +0 -0
  146. bootstack/assets/widgets/button-group-vertical-before.png +0 -0
  147. bootstack/assets/widgets/button-group-vertical-center.png +0 -0
  148. bootstack/assets/widgets/button.png +0 -0
  149. bootstack/assets/widgets/checkbox-checked.png +0 -0
  150. bootstack/assets/widgets/checkbox-indeterminate.png +0 -0
  151. bootstack/assets/widgets/checkbox-unchecked.png +0 -0
  152. bootstack/assets/widgets/field.png +0 -0
  153. bootstack/assets/widgets/icon-button.png +0 -0
  154. bootstack/assets/widgets/input-inner.png +0 -0
  155. bootstack/assets/widgets/input-prefix.png +0 -0
  156. bootstack/assets/widgets/input-suffix.png +0 -0
  157. bootstack/assets/widgets/input.png +0 -0
  158. bootstack/assets/widgets/list-item-focus.png +0 -0
  159. bootstack/assets/widgets/list-item-separated.png +0 -0
  160. bootstack/assets/widgets/menu-item-separated.png +0 -0
  161. bootstack/assets/widgets/notebook-client-border.png +0 -0
  162. bootstack/assets/widgets/notebook-pill-active.png +0 -0
  163. bootstack/assets/widgets/notebook-pill-inactive.png +0 -0
  164. bootstack/assets/widgets/notebook-tab-active.png +0 -0
  165. bootstack/assets/widgets/notebook-tab-border.png +0 -0
  166. bootstack/assets/widgets/notebook-tab-normal.png +0 -0
  167. bootstack/assets/widgets/notebook-underline.png +0 -0
  168. bootstack/assets/widgets/progress-bar-horizontal-default.png +0 -0
  169. bootstack/assets/widgets/progress-bar-horizontal-striped.png +0 -0
  170. bootstack/assets/widgets/progress-bar-vertical-default.png +0 -0
  171. bootstack/assets/widgets/progress-bar-vertical-striped.png +0 -0
  172. bootstack/assets/widgets/progress-trough-horizontal.png +0 -0
  173. bootstack/assets/widgets/progress-trough-vertical.png +0 -0
  174. bootstack/assets/widgets/radio-selected.png +0 -0
  175. bootstack/assets/widgets/radio-unselected.png +0 -0
  176. bootstack/assets/widgets/scrollbar-horizontal-rounded.png +0 -0
  177. bootstack/assets/widgets/scrollbar-vertical-rounded.png +0 -0
  178. bootstack/assets/widgets/separator-horizontal.png +0 -0
  179. bootstack/assets/widgets/separator-vertical.png +0 -0
  180. bootstack/assets/widgets/slider-handle-focus.png +0 -0
  181. bootstack/assets/widgets/slider-handle.png +0 -0
  182. bootstack/assets/widgets/slider-track-horizontal.png +0 -0
  183. bootstack/assets/widgets/slider-track-vertical.png +0 -0
  184. bootstack/assets/widgets/switch-off.png +0 -0
  185. bootstack/assets/widgets/switch-on.png +0 -0
  186. bootstack/assets/widgets/tabs-bar-horizontal.png +0 -0
  187. bootstack/assets/widgets/tabs-bar-vertical.png +0 -0
  188. bootstack/assets/widgets/tabs-pill.png +0 -0
  189. bootstack/cli/__init__.py +124 -0
  190. bootstack/cli/__main__.py +6 -0
  191. bootstack/cli/add.py +439 -0
  192. bootstack/cli/build.py +115 -0
  193. bootstack/cli/config.py +287 -0
  194. bootstack/cli/demo.py +1267 -0
  195. bootstack/cli/doctor.py +195 -0
  196. bootstack/cli/list_cmd.py +71 -0
  197. bootstack/cli/promote.py +120 -0
  198. bootstack/cli/pyinstaller.py +246 -0
  199. bootstack/cli/run.py +99 -0
  200. bootstack/cli/start.py +105 -0
  201. bootstack/cli/templates/__init__.py +861 -0
  202. bootstack/constants.py +325 -0
  203. bootstack/core/__init__.py +34 -0
  204. bootstack/core/capabilities/__init__.py +45 -0
  205. bootstack/core/capabilities/after.py +103 -0
  206. bootstack/core/capabilities/bind.py +154 -0
  207. bootstack/core/capabilities/bindtags.py +112 -0
  208. bootstack/core/capabilities/busy.py +61 -0
  209. bootstack/core/capabilities/clipboard.py +88 -0
  210. bootstack/core/capabilities/focus.py +118 -0
  211. bootstack/core/capabilities/grab.py +65 -0
  212. bootstack/core/capabilities/grid.py +188 -0
  213. bootstack/core/capabilities/localization.py +231 -0
  214. bootstack/core/capabilities/pack.py +119 -0
  215. bootstack/core/capabilities/place.py +92 -0
  216. bootstack/core/capabilities/selection.py +136 -0
  217. bootstack/core/capabilities/signals.py +242 -0
  218. bootstack/core/capabilities/winfo.py +315 -0
  219. bootstack/core/colorutils.py +234 -0
  220. bootstack/core/exceptions.py +95 -0
  221. bootstack/core/images.py +283 -0
  222. bootstack/core/localization/README.md +90 -0
  223. bootstack/core/localization/__init__.py +13 -0
  224. bootstack/core/localization/intl_format.py +580 -0
  225. bootstack/core/localization/msgcat.py +425 -0
  226. bootstack/core/localization/specs.py +143 -0
  227. bootstack/core/mixins/__init__.py +1 -0
  228. bootstack/core/mixins/ttk_state.py +35 -0
  229. bootstack/core/mixins/widget.py +132 -0
  230. bootstack/core/publisher.py +147 -0
  231. bootstack/core/signals/README.md +112 -0
  232. bootstack/core/signals/__init__.py +8 -0
  233. bootstack/core/signals/integration.py +100 -0
  234. bootstack/core/signals/signal.py +317 -0
  235. bootstack/core/signals/types.py +4 -0
  236. bootstack/core/validation/__init__.py +5 -0
  237. bootstack/core/validation/types.py +13 -0
  238. bootstack/core/validation/validation_result.py +17 -0
  239. bootstack/core/validation/validation_rules.py +112 -0
  240. bootstack/core/variables.py +62 -0
  241. bootstack/datasource/README.md +607 -0
  242. bootstack/datasource/__init__.py +51 -0
  243. bootstack/datasource/base.py +474 -0
  244. bootstack/datasource/file_source.py +541 -0
  245. bootstack/datasource/memory_source.py +482 -0
  246. bootstack/datasource/sqlite_source.py +453 -0
  247. bootstack/datasource/types.py +259 -0
  248. bootstack/dialogs/__init__.py +56 -0
  249. bootstack/dialogs/colorchooser.py +674 -0
  250. bootstack/dialogs/colordropper.py +257 -0
  251. bootstack/dialogs/datedialog.py +404 -0
  252. bootstack/dialogs/dialog.py +514 -0
  253. bootstack/dialogs/filterdialog.py +358 -0
  254. bootstack/dialogs/fontdialog.py +339 -0
  255. bootstack/dialogs/formdialog.py +541 -0
  256. bootstack/dialogs/message.py +489 -0
  257. bootstack/dialogs/query.py +561 -0
  258. bootstack/py.typed +1 -0
  259. bootstack/runtime/__init__.py +3 -0
  260. bootstack/runtime/app.py +879 -0
  261. bootstack/runtime/base_window.py +786 -0
  262. bootstack/runtime/events.py +399 -0
  263. bootstack/runtime/menu.py +510 -0
  264. bootstack/runtime/shortcuts.py +423 -0
  265. bootstack/runtime/tk_patch.py +31 -0
  266. bootstack/runtime/toplevel.py +131 -0
  267. bootstack/runtime/utility.py +371 -0
  268. bootstack/runtime/visual_focus.py +228 -0
  269. bootstack/runtime/window_utilities.py +1043 -0
  270. bootstack/style/__init__.py +5498 -0
  271. bootstack/style/bootstyle.py +507 -0
  272. bootstack/style/bootstyle_builder_base.py +752 -0
  273. bootstack/style/bootstyle_builder_mixed.py +93 -0
  274. bootstack/style/bootstyle_builder_tk.py +109 -0
  275. bootstack/style/bootstyle_builder_ttk.py +354 -0
  276. bootstack/style/builders/__init__.py +51 -0
  277. bootstack/style/builders/badge.py +44 -0
  278. bootstack/style/builders/button.py +453 -0
  279. bootstack/style/builders/buttongroup.py +344 -0
  280. bootstack/style/builders/calendar.py +271 -0
  281. bootstack/style/builders/checkbutton.py +95 -0
  282. bootstack/style/builders/combobox.py +112 -0
  283. bootstack/style/builders/contextmenu.py +268 -0
  284. bootstack/style/builders/entry.py +83 -0
  285. bootstack/style/builders/expander.py +171 -0
  286. bootstack/style/builders/field.py +312 -0
  287. bootstack/style/builders/frame.py +27 -0
  288. bootstack/style/builders/label.py +28 -0
  289. bootstack/style/builders/labelframe.py +41 -0
  290. bootstack/style/builders/listview.py +267 -0
  291. bootstack/style/builders/menubar.py +74 -0
  292. bootstack/style/builders/menubutton.py +408 -0
  293. bootstack/style/builders/notebook.py +316 -0
  294. bootstack/style/builders/panedwindow.py +25 -0
  295. bootstack/style/builders/progressbar.py +71 -0
  296. bootstack/style/builders/radiobutton.py +68 -0
  297. bootstack/style/builders/scale.py +66 -0
  298. bootstack/style/builders/scrollbar.py +360 -0
  299. bootstack/style/builders/separator.py +45 -0
  300. bootstack/style/builders/sidenav.py +313 -0
  301. bootstack/style/builders/sizegrip.py +15 -0
  302. bootstack/style/builders/spinbox.py +119 -0
  303. bootstack/style/builders/switch.py +67 -0
  304. bootstack/style/builders/tabitem.py +205 -0
  305. bootstack/style/builders/toolbutton.py +260 -0
  306. bootstack/style/builders/tooltip.py +26 -0
  307. bootstack/style/builders/treeview.py +269 -0
  308. bootstack/style/builders/utils.py +404 -0
  309. bootstack/style/builders_tk/__init__.py +16 -0
  310. bootstack/style/builders_tk/defaults.py +229 -0
  311. bootstack/style/element.py +173 -0
  312. bootstack/style/style.py +499 -0
  313. bootstack/style/theme_provider.py +449 -0
  314. bootstack/style/tk_patch.py +5 -0
  315. bootstack/style/token_maps.py +42 -0
  316. bootstack/style/types.py +32 -0
  317. bootstack/style/typography.py +527 -0
  318. bootstack/style/utility.py +696 -0
  319. bootstack/themes/__init__.py +12 -0
  320. bootstack/themes/standard.py +415 -0
  321. bootstack/themes/user.py +45 -0
  322. bootstack/widgets/__init__.py +53 -0
  323. bootstack/widgets/composites/__init__.py +38 -0
  324. bootstack/widgets/composites/accordion.py +385 -0
  325. bootstack/widgets/composites/appshell.py +445 -0
  326. bootstack/widgets/composites/buttongroup.py +391 -0
  327. bootstack/widgets/composites/calendar.py +914 -0
  328. bootstack/widgets/composites/compositeframe.py +282 -0
  329. bootstack/widgets/composites/contextmenu.py +1754 -0
  330. bootstack/widgets/composites/dateentry.py +261 -0
  331. bootstack/widgets/composites/dropdownbutton.py +190 -0
  332. bootstack/widgets/composites/expander.py +508 -0
  333. bootstack/widgets/composites/field.py +448 -0
  334. bootstack/widgets/composites/floodgauge.py +434 -0
  335. bootstack/widgets/composites/form.py +983 -0
  336. bootstack/widgets/composites/labeledscale.py +209 -0
  337. bootstack/widgets/composites/list/__init__.py +15 -0
  338. bootstack/widgets/composites/list/listitem.py +733 -0
  339. bootstack/widgets/composites/list/listview.py +1507 -0
  340. bootstack/widgets/composites/menubar.py +303 -0
  341. bootstack/widgets/composites/meter.py +882 -0
  342. bootstack/widgets/composites/numericentry.py +183 -0
  343. bootstack/widgets/composites/pagestack.py +330 -0
  344. bootstack/widgets/composites/passwordentry.py +149 -0
  345. bootstack/widgets/composites/pathentry.py +223 -0
  346. bootstack/widgets/composites/radiogroup.py +466 -0
  347. bootstack/widgets/composites/scrolledtext.py +388 -0
  348. bootstack/widgets/composites/scrolledtext.pyi +186 -0
  349. bootstack/widgets/composites/scrollview.py +675 -0
  350. bootstack/widgets/composites/selectbox.py +544 -0
  351. bootstack/widgets/composites/sidenav/__init__.py +24 -0
  352. bootstack/widgets/composites/sidenav/group.py +485 -0
  353. bootstack/widgets/composites/sidenav/header.py +83 -0
  354. bootstack/widgets/composites/sidenav/item.py +413 -0
  355. bootstack/widgets/composites/sidenav/separator.py +51 -0
  356. bootstack/widgets/composites/sidenav/view.py +919 -0
  357. bootstack/widgets/composites/spinnerentry.py +232 -0
  358. bootstack/widgets/composites/tableview/__init__.py +5 -0
  359. bootstack/widgets/composites/tableview/tableview.py +2254 -0
  360. bootstack/widgets/composites/tableview/types.py +169 -0
  361. bootstack/widgets/composites/tabs/__init__.py +6 -0
  362. bootstack/widgets/composites/tabs/tabitem.py +372 -0
  363. bootstack/widgets/composites/tabs/tabs.py +478 -0
  364. bootstack/widgets/composites/tabs/tabview.py +352 -0
  365. bootstack/widgets/composites/textentry.py +90 -0
  366. bootstack/widgets/composites/timeentry.py +189 -0
  367. bootstack/widgets/composites/toast.py +364 -0
  368. bootstack/widgets/composites/togglegroup.py +382 -0
  369. bootstack/widgets/composites/toolbar.py +393 -0
  370. bootstack/widgets/composites/tooltip.py +404 -0
  371. bootstack/widgets/internal/__init__.py +0 -0
  372. bootstack/widgets/internal/wrapper_base.py +304 -0
  373. bootstack/widgets/mixins/__init__.py +25 -0
  374. bootstack/widgets/mixins/configure_mixin.py +186 -0
  375. bootstack/widgets/mixins/entry_mixin.py +70 -0
  376. bootstack/widgets/mixins/font_mixin.py +346 -0
  377. bootstack/widgets/mixins/icon_mixin.py +38 -0
  378. bootstack/widgets/mixins/localization_mixin.py +255 -0
  379. bootstack/widgets/mixins/signal_mixin.py +272 -0
  380. bootstack/widgets/mixins/validation_mixin.py +204 -0
  381. bootstack/widgets/parts/__init__.py +11 -0
  382. bootstack/widgets/parts/numberentry_part.py +345 -0
  383. bootstack/widgets/parts/spinnerentry_part.py +394 -0
  384. bootstack/widgets/parts/textentry_part.py +344 -0
  385. bootstack/widgets/primitives/__init__.py +55 -0
  386. bootstack/widgets/primitives/badge.py +44 -0
  387. bootstack/widgets/primitives/button.py +89 -0
  388. bootstack/widgets/primitives/card.py +66 -0
  389. bootstack/widgets/primitives/checkbutton.py +124 -0
  390. bootstack/widgets/primitives/checktoggle.py +53 -0
  391. bootstack/widgets/primitives/combobox.py +165 -0
  392. bootstack/widgets/primitives/entry.py +98 -0
  393. bootstack/widgets/primitives/frame.py +206 -0
  394. bootstack/widgets/primitives/gridframe.py +479 -0
  395. bootstack/widgets/primitives/label.py +95 -0
  396. bootstack/widgets/primitives/labelframe.py +63 -0
  397. bootstack/widgets/primitives/menubutton.py +118 -0
  398. bootstack/widgets/primitives/notebook.py +551 -0
  399. bootstack/widgets/primitives/optionmenu.py +248 -0
  400. bootstack/widgets/primitives/packframe.py +228 -0
  401. bootstack/widgets/primitives/panedwindow.py +58 -0
  402. bootstack/widgets/primitives/progressbar.py +95 -0
  403. bootstack/widgets/primitives/radiobutton.py +115 -0
  404. bootstack/widgets/primitives/radiotoggle.py +50 -0
  405. bootstack/widgets/primitives/scale.py +85 -0
  406. bootstack/widgets/primitives/scrollbar.py +56 -0
  407. bootstack/widgets/primitives/separator.py +56 -0
  408. bootstack/widgets/primitives/sizegrip.py +47 -0
  409. bootstack/widgets/primitives/spinbox.py +91 -0
  410. bootstack/widgets/primitives/switch.py +41 -0
  411. bootstack/widgets/primitives/treeview.py +77 -0
  412. bootstack/widgets/types.py +20 -0
  413. bootstack-0.1.0a1.dist-info/METADATA +196 -0
  414. bootstack-0.1.0a1.dist-info/RECORD +419 -0
  415. bootstack-0.1.0a1.dist-info/WHEEL +5 -0
  416. bootstack-0.1.0a1.dist-info/entry_points.txt +2 -0
  417. bootstack-0.1.0a1.dist-info/licenses/LICENSE +22 -0
  418. bootstack-0.1.0a1.dist-info/licenses/NOTICE +10 -0
  419. 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: ...