bootstack 0.1.0__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 (471) hide show
  1. bootstack/__init__.py +157 -0
  2. bootstack/__main__.py +5 -0
  3. bootstack/_core/__init__.py +21 -0
  4. bootstack/_core/capabilities/__init__.py +45 -0
  5. bootstack/_core/capabilities/after.py +103 -0
  6. bootstack/_core/capabilities/bind.py +192 -0
  7. bootstack/_core/capabilities/bindtags.py +112 -0
  8. bootstack/_core/capabilities/busy.py +72 -0
  9. bootstack/_core/capabilities/clipboard.py +89 -0
  10. bootstack/_core/capabilities/focus.py +118 -0
  11. bootstack/_core/capabilities/grab.py +65 -0
  12. bootstack/_core/capabilities/grid.py +211 -0
  13. bootstack/_core/capabilities/localization.py +231 -0
  14. bootstack/_core/capabilities/pack.py +140 -0
  15. bootstack/_core/capabilities/place.py +113 -0
  16. bootstack/_core/capabilities/selection.py +136 -0
  17. bootstack/_core/capabilities/signals.py +244 -0
  18. bootstack/_core/capabilities/winfo.py +315 -0
  19. bootstack/_core/colorutils.py +234 -0
  20. bootstack/_core/exceptions.py +25 -0
  21. bootstack/_core/images.py +463 -0
  22. bootstack/_core/mixins/__init__.py +1 -0
  23. bootstack/_core/mixins/ttk_state.py +35 -0
  24. bootstack/_core/mixins/widget.py +132 -0
  25. bootstack/_core/paths.py +49 -0
  26. bootstack/_core/publisher.py +149 -0
  27. bootstack/_core/variables.py +62 -0
  28. bootstack/_runtime/__init__.py +3 -0
  29. bootstack/_runtime/app.py +930 -0
  30. bootstack/_runtime/base_window.py +945 -0
  31. bootstack/_runtime/events.py +399 -0
  32. bootstack/_runtime/shortcuts.py +496 -0
  33. bootstack/_runtime/tk_patch.py +43 -0
  34. bootstack/_runtime/toplevel.py +276 -0
  35. bootstack/_runtime/utility.py +457 -0
  36. bootstack/_runtime/visual_focus.py +240 -0
  37. bootstack/_runtime/window_utilities.py +1123 -0
  38. bootstack/assets/__init__.py +21 -0
  39. bootstack/assets/bootstack.ico +0 -0
  40. bootstack/assets/bootstack.png +0 -0
  41. bootstack/assets/elements/__init__.py +0 -0
  42. bootstack/assets/elements/badge-pill.png +0 -0
  43. bootstack/assets/elements/badge-square.png +0 -0
  44. bootstack/assets/elements/button-compact.png +0 -0
  45. bootstack/assets/elements/button-default.png +0 -0
  46. bootstack/assets/elements/buttongroup-after-h-compact.png +0 -0
  47. bootstack/assets/elements/buttongroup-after-h-default.png +0 -0
  48. bootstack/assets/elements/buttongroup-after-v-compact.png +0 -0
  49. bootstack/assets/elements/buttongroup-after-v-default.png +0 -0
  50. bootstack/assets/elements/buttongroup-before-h-compact.png +0 -0
  51. bootstack/assets/elements/buttongroup-before-h-default.png +0 -0
  52. bootstack/assets/elements/buttongroup-before-v-compact.png +0 -0
  53. bootstack/assets/elements/buttongroup-before-v-default.png +0 -0
  54. bootstack/assets/elements/buttongroup-center-h-compact.png +0 -0
  55. bootstack/assets/elements/buttongroup-center-h-default.png +0 -0
  56. bootstack/assets/elements/buttongroup-center-v-compact.png +0 -0
  57. bootstack/assets/elements/buttongroup-center-v-default.png +0 -0
  58. bootstack/assets/elements/card.png +0 -0
  59. bootstack/assets/elements/checkbox-checked.png +0 -0
  60. bootstack/assets/elements/checkbox-indeterminate.png +0 -0
  61. bootstack/assets/elements/checkbox-unchecked.png +0 -0
  62. bootstack/assets/elements/field.png +0 -0
  63. bootstack/assets/elements/input-addon-compact.png +0 -0
  64. bootstack/assets/elements/input-addon-default.png +0 -0
  65. bootstack/assets/elements/input-compact.png +0 -0
  66. bootstack/assets/elements/input-default.png +0 -0
  67. bootstack/assets/elements/list-item-separated.png +0 -0
  68. bootstack/assets/elements/list-item.png +0 -0
  69. bootstack/assets/elements/listrow-compact.png +0 -0
  70. bootstack/assets/elements/listrow-default.png +0 -0
  71. bootstack/assets/elements/manifest.toml +361 -0
  72. bootstack/assets/elements/menu-item.png +0 -0
  73. bootstack/assets/elements/navitem-compact.png +0 -0
  74. bootstack/assets/elements/navitem-default.png +0 -0
  75. bootstack/assets/elements/progressbar-h-compact.png +0 -0
  76. bootstack/assets/elements/progressbar-h-default.png +0 -0
  77. bootstack/assets/elements/progressbar-v-compact.png +0 -0
  78. bootstack/assets/elements/progressbar-v-default.png +0 -0
  79. bootstack/assets/elements/radiobutton.png +0 -0
  80. bootstack/assets/elements/scrollbar-horizontal.png +0 -0
  81. bootstack/assets/elements/scrollbar-vertical.png +0 -0
  82. bootstack/assets/elements/slider-handle.png +0 -0
  83. bootstack/assets/elements/slider-track-h.png +0 -0
  84. bootstack/assets/elements/slider-track-v.png +0 -0
  85. bootstack/assets/elements/switch-off.png +0 -0
  86. bootstack/assets/elements/switch-on.png +0 -0
  87. bootstack/assets/elements/tab-h.png +0 -0
  88. bootstack/assets/elements/tab-v.png +0 -0
  89. bootstack/assets/icons/bootstrap.ttf +0 -0
  90. bootstack/assets/icons/glyphmap.json +2080 -0
  91. bootstack/assets/icons/icon_metrics.json +12470 -0
  92. bootstack/assets/locales/ar/LC_MESSAGES/bootstack.mo +0 -0
  93. bootstack/assets/locales/ar/LC_MESSAGES/bootstack.po +856 -0
  94. bootstack/assets/locales/bg/LC_MESSAGES/bootstack.mo +0 -0
  95. bootstack/assets/locales/bg/LC_MESSAGES/bootstack.po +878 -0
  96. bootstack/assets/locales/cs/LC_MESSAGES/bootstack.mo +0 -0
  97. bootstack/assets/locales/cs/LC_MESSAGES/bootstack.po +856 -0
  98. bootstack/assets/locales/da/LC_MESSAGES/bootstack.mo +0 -0
  99. bootstack/assets/locales/da/LC_MESSAGES/bootstack.po +856 -0
  100. bootstack/assets/locales/de/LC_MESSAGES/bootstack.mo +0 -0
  101. bootstack/assets/locales/de/LC_MESSAGES/bootstack.po +856 -0
  102. bootstack/assets/locales/en/LC_MESSAGES/bootstack.mo +0 -0
  103. bootstack/assets/locales/en/LC_MESSAGES/bootstack.po +878 -0
  104. bootstack/assets/locales/es/LC_MESSAGES/bootstack.mo +0 -0
  105. bootstack/assets/locales/es/LC_MESSAGES/bootstack.po +856 -0
  106. bootstack/assets/locales/fr/LC_MESSAGES/bootstack.mo +0 -0
  107. bootstack/assets/locales/fr/LC_MESSAGES/bootstack.po +856 -0
  108. bootstack/assets/locales/he/LC_MESSAGES/bootstack.mo +0 -0
  109. bootstack/assets/locales/he/LC_MESSAGES/bootstack.po +854 -0
  110. bootstack/assets/locales/hi/LC_MESSAGES/bootstack.mo +0 -0
  111. bootstack/assets/locales/hi/LC_MESSAGES/bootstack.po +845 -0
  112. bootstack/assets/locales/it/LC_MESSAGES/bootstack.mo +0 -0
  113. bootstack/assets/locales/it/LC_MESSAGES/bootstack.po +844 -0
  114. bootstack/assets/locales/ja/LC_MESSAGES/bootstack.mo +0 -0
  115. bootstack/assets/locales/ja/LC_MESSAGES/bootstack.po +917 -0
  116. bootstack/assets/locales/ko/LC_MESSAGES/bootstack.mo +0 -0
  117. bootstack/assets/locales/ko/LC_MESSAGES/bootstack.po +845 -0
  118. bootstack/assets/locales/nb/LC_MESSAGES/bootstack.mo +0 -0
  119. bootstack/assets/locales/nb/LC_MESSAGES/bootstack.po +844 -0
  120. bootstack/assets/locales/nl/LC_MESSAGES/bootstack.mo +0 -0
  121. bootstack/assets/locales/nl/LC_MESSAGES/bootstack.po +844 -0
  122. bootstack/assets/locales/pl/LC_MESSAGES/bootstack.mo +0 -0
  123. bootstack/assets/locales/pl/LC_MESSAGES/bootstack.po +845 -0
  124. bootstack/assets/locales/pt/LC_MESSAGES/bootstack.mo +0 -0
  125. bootstack/assets/locales/pt/LC_MESSAGES/bootstack.po +845 -0
  126. bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.mo +0 -0
  127. bootstack/assets/locales/pt_BR/LC_MESSAGES/bootstack.po +845 -0
  128. bootstack/assets/locales/sl/LC_MESSAGES/bootstack.mo +0 -0
  129. bootstack/assets/locales/sl/LC_MESSAGES/bootstack.po +845 -0
  130. bootstack/assets/locales/sv/LC_MESSAGES/bootstack.mo +0 -0
  131. bootstack/assets/locales/sv/LC_MESSAGES/bootstack.po +845 -0
  132. bootstack/assets/locales/tr/LC_MESSAGES/bootstack.mo +0 -0
  133. bootstack/assets/locales/tr/LC_MESSAGES/bootstack.po +845 -0
  134. bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.mo +0 -0
  135. bootstack/assets/locales/zh_CN/LC_MESSAGES/bootstack.po +845 -0
  136. bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.mo +0 -0
  137. bootstack/assets/locales/zh_TW/LC_MESSAGES/bootstack.po +845 -0
  138. bootstack/cli/__init__.py +133 -0
  139. bootstack/cli/__main__.py +6 -0
  140. bootstack/cli/add.py +395 -0
  141. bootstack/cli/appicon.py +285 -0
  142. bootstack/cli/build.py +115 -0
  143. bootstack/cli/config.py +313 -0
  144. bootstack/cli/demo.py +564 -0
  145. bootstack/cli/dev.py +153 -0
  146. bootstack/cli/doctor.py +195 -0
  147. bootstack/cli/icons.py +98 -0
  148. bootstack/cli/promote.py +120 -0
  149. bootstack/cli/pyinstaller.py +268 -0
  150. bootstack/cli/run.py +95 -0
  151. bootstack/cli/start.py +117 -0
  152. bootstack/cli/templates/__init__.py +931 -0
  153. bootstack/clipboard.py +48 -0
  154. bootstack/constants.py +318 -0
  155. bootstack/data/README.md +615 -0
  156. bootstack/data/__init__.py +78 -0
  157. bootstack/data/_observable.py +276 -0
  158. bootstack/data/base.py +780 -0
  159. bootstack/data/file_source.py +367 -0
  160. bootstack/data/memory_source.py +450 -0
  161. bootstack/data/query.py +367 -0
  162. bootstack/data/readers.py +289 -0
  163. bootstack/data/sqlite_source.py +869 -0
  164. bootstack/data/types.py +354 -0
  165. bootstack/data/writers.py +232 -0
  166. bootstack/dev/__init__.py +36 -0
  167. bootstack/dev/_capture.py +141 -0
  168. bootstack/dev/_env.py +43 -0
  169. bootstack/dev/_registry.py +140 -0
  170. bootstack/dev/_reloader.py +351 -0
  171. bootstack/dev/_reset.py +50 -0
  172. bootstack/dev/_watcher.py +91 -0
  173. bootstack/dialogs/__init__.py +948 -0
  174. bootstack/dialogs/_impl/__init__.py +47 -0
  175. bootstack/dialogs/_impl/colorchooser.py +588 -0
  176. bootstack/dialogs/_impl/datedialog.py +450 -0
  177. bootstack/dialogs/_impl/dialog.py +594 -0
  178. bootstack/dialogs/_impl/filterdialog.py +358 -0
  179. bootstack/dialogs/_impl/fontdialog.py +364 -0
  180. bootstack/dialogs/_impl/formdialog.py +564 -0
  181. bootstack/dialogs/_impl/message.py +486 -0
  182. bootstack/dialogs/_impl/query.py +570 -0
  183. bootstack/errors.py +67 -0
  184. bootstack/events/__init__.py +111 -0
  185. bootstack/events/_event.py +135 -0
  186. bootstack/events/_payloads.py +539 -0
  187. bootstack/events/_subscription.py +38 -0
  188. bootstack/i18n/README.md +77 -0
  189. bootstack/i18n/__init__.py +23 -0
  190. bootstack/i18n/catalog.py +121 -0
  191. bootstack/i18n/intl_format.py +584 -0
  192. bootstack/i18n/msgcat.py +425 -0
  193. bootstack/i18n/specs.py +156 -0
  194. bootstack/images.py +563 -0
  195. bootstack/py.typed +1 -0
  196. bootstack/scheduling/__init__.py +11 -0
  197. bootstack/scheduling/_schedule.py +218 -0
  198. bootstack/shortcuts.py +21 -0
  199. bootstack/signals/README.md +98 -0
  200. bootstack/signals/__init__.py +10 -0
  201. bootstack/signals/integration.py +100 -0
  202. bootstack/signals/signal.py +353 -0
  203. bootstack/signals/types.py +6 -0
  204. bootstack/store.py +286 -0
  205. bootstack/streams/__init__.py +12 -0
  206. bootstack/streams/_stream.py +321 -0
  207. bootstack/style/__init__.py +38 -0
  208. bootstack/style/builders/__init__.py +51 -0
  209. bootstack/style/builders/badge.py +46 -0
  210. bootstack/style/builders/button.py +339 -0
  211. bootstack/style/builders/buttongroup.py +311 -0
  212. bootstack/style/builders/calendar.py +271 -0
  213. bootstack/style/builders/checkbutton.py +110 -0
  214. bootstack/style/builders/combobox.py +113 -0
  215. bootstack/style/builders/contextmenu.py +268 -0
  216. bootstack/style/builders/entry.py +82 -0
  217. bootstack/style/builders/expander.py +148 -0
  218. bootstack/style/builders/field.py +335 -0
  219. bootstack/style/builders/frame.py +50 -0
  220. bootstack/style/builders/label.py +28 -0
  221. bootstack/style/builders/labelframe.py +34 -0
  222. bootstack/style/builders/listview.py +369 -0
  223. bootstack/style/builders/menubar.py +91 -0
  224. bootstack/style/builders/menubutton.py +359 -0
  225. bootstack/style/builders/panedwindow.py +25 -0
  226. bootstack/style/builders/progressbar.py +67 -0
  227. bootstack/style/builders/radiobutton.py +99 -0
  228. bootstack/style/builders/scale.py +64 -0
  229. bootstack/style/builders/scrollbar.py +225 -0
  230. bootstack/style/builders/separator.py +49 -0
  231. bootstack/style/builders/sidenav.py +643 -0
  232. bootstack/style/builders/sizegrip.py +15 -0
  233. bootstack/style/builders/spinbox.py +119 -0
  234. bootstack/style/builders/switch.py +70 -0
  235. bootstack/style/builders/tabitem.py +204 -0
  236. bootstack/style/builders/togglegroup.py +294 -0
  237. bootstack/style/builders/toolbutton.py +275 -0
  238. bootstack/style/builders/tooltip.py +26 -0
  239. bootstack/style/builders/treeview.py +193 -0
  240. bootstack/style/builders/utils.py +455 -0
  241. bootstack/style/builders_tk/__init__.py +16 -0
  242. bootstack/style/builders_tk/defaults.py +229 -0
  243. bootstack/style/element.py +173 -0
  244. bootstack/style/fonts.py +123 -0
  245. bootstack/style/style.py +609 -0
  246. bootstack/style/style_builder_base.py +716 -0
  247. bootstack/style/style_builder_mixed.py +93 -0
  248. bootstack/style/style_builder_tk.py +109 -0
  249. bootstack/style/style_builder_ttk.py +353 -0
  250. bootstack/style/style_resolver.py +447 -0
  251. bootstack/style/theme.py +245 -0
  252. bootstack/style/theme_provider.py +471 -0
  253. bootstack/style/themes/__init__.py +128 -0
  254. bootstack/style/tk_patch.py +5 -0
  255. bootstack/style/token_maps.py +41 -0
  256. bootstack/style/types.py +32 -0
  257. bootstack/style/typography.py +523 -0
  258. bootstack/style/utility.py +746 -0
  259. bootstack/types.py +39 -0
  260. bootstack/validation/__init__.py +6 -0
  261. bootstack/validation/types.py +15 -0
  262. bootstack/validation/validation_result.py +17 -0
  263. bootstack/validation/validation_rules.py +205 -0
  264. bootstack/widgets/__init__.py +74 -0
  265. bootstack/widgets/_core/__init__.py +31 -0
  266. bootstack/widgets/_core/app_config.py +266 -0
  267. bootstack/widgets/_core/base.py +461 -0
  268. bootstack/widgets/_core/container.py +334 -0
  269. bootstack/widgets/_core/context.py +35 -0
  270. bootstack/widgets/_core/events.py +130 -0
  271. bootstack/widgets/_core/field_mixin.py +353 -0
  272. bootstack/widgets/_core/icon_image_props.py +72 -0
  273. bootstack/widgets/_core/image_binding.py +93 -0
  274. bootstack/widgets/_core/navmodel.py +345 -0
  275. bootstack/widgets/_core/options.py +210 -0
  276. bootstack/widgets/_core/selection_group.py +130 -0
  277. bootstack/widgets/_core/window_controls.py +96 -0
  278. bootstack/widgets/_core/window_menu.py +246 -0
  279. bootstack/widgets/_impl/__init__.py +1 -0
  280. bootstack/widgets/_impl/_internal/__init__.py +0 -0
  281. bootstack/widgets/_impl/_internal/wrapper_base.py +307 -0
  282. bootstack/widgets/_impl/_parts/__init__.py +11 -0
  283. bootstack/widgets/_impl/_parts/numberentry_part.py +385 -0
  284. bootstack/widgets/_impl/_parts/spinnerentry_part.py +434 -0
  285. bootstack/widgets/_impl/_parts/textentry_part.py +406 -0
  286. bootstack/widgets/_impl/composites/__init__.py +33 -0
  287. bootstack/widgets/_impl/composites/_dateutils.py +33 -0
  288. bootstack/widgets/_impl/composites/_image_fit.py +105 -0
  289. bootstack/widgets/_impl/composites/accordion.py +381 -0
  290. bootstack/widgets/_impl/composites/avatar.py +191 -0
  291. bootstack/widgets/_impl/composites/buttongroup.py +371 -0
  292. bootstack/widgets/_impl/composites/calendar.py +972 -0
  293. bootstack/widgets/_impl/composites/carousel.py +567 -0
  294. bootstack/widgets/_impl/composites/chart.py +882 -0
  295. bootstack/widgets/_impl/composites/compositeframe.py +298 -0
  296. bootstack/widgets/_impl/composites/contextmenu.py +1951 -0
  297. bootstack/widgets/_impl/composites/dateentry.py +404 -0
  298. bootstack/widgets/_impl/composites/dropdownbutton.py +325 -0
  299. bootstack/widgets/_impl/composites/expander.py +515 -0
  300. bootstack/widgets/_impl/composites/field.py +670 -0
  301. bootstack/widgets/_impl/composites/form.py +1066 -0
  302. bootstack/widgets/_impl/composites/gallery.py +551 -0
  303. bootstack/widgets/_impl/composites/list/__init__.py +15 -0
  304. bootstack/widgets/_impl/composites/list/listitem.py +802 -0
  305. bootstack/widgets/_impl/composites/list/listview.py +1433 -0
  306. bootstack/widgets/_impl/composites/menu/__init__.py +18 -0
  307. bootstack/widgets/_impl/composites/menu/model.py +358 -0
  308. bootstack/widgets/_impl/composites/menu/render_native.py +134 -0
  309. bootstack/widgets/_impl/composites/menu/render_themed.py +134 -0
  310. bootstack/widgets/_impl/composites/meter.py +860 -0
  311. bootstack/widgets/_impl/composites/numericentry.py +201 -0
  312. bootstack/widgets/_impl/composites/pagestack.py +395 -0
  313. bootstack/widgets/_impl/composites/passwordentry.py +142 -0
  314. bootstack/widgets/_impl/composites/pathentry.py +168 -0
  315. bootstack/widgets/_impl/composites/picture.py +289 -0
  316. bootstack/widgets/_impl/composites/radiogroup.py +511 -0
  317. bootstack/widgets/_impl/composites/scrolledtext.py +375 -0
  318. bootstack/widgets/_impl/composites/scrolledtext.pyi +186 -0
  319. bootstack/widgets/_impl/composites/scrollview.py +764 -0
  320. bootstack/widgets/_impl/composites/selectbox.py +1026 -0
  321. bootstack/widgets/_impl/composites/shell/__init__.py +40 -0
  322. bootstack/widgets/_impl/composites/shell/content_host.py +52 -0
  323. bootstack/widgets/_impl/composites/shell/layout.py +335 -0
  324. bootstack/widgets/_impl/composites/shell/nav_panel.py +345 -0
  325. bootstack/widgets/_impl/composites/shell/providers.py +558 -0
  326. bootstack/widgets/_impl/composites/shell/rail.py +117 -0
  327. bootstack/widgets/_impl/composites/shell/shell.py +581 -0
  328. bootstack/widgets/_impl/composites/shell/workspace.py +273 -0
  329. bootstack/widgets/_impl/composites/sidenav/__init__.py +16 -0
  330. bootstack/widgets/_impl/composites/sidenav/header.py +81 -0
  331. bootstack/widgets/_impl/composites/sidenav/separator.py +44 -0
  332. bootstack/widgets/_impl/composites/slider/__init__.py +7 -0
  333. bootstack/widgets/_impl/composites/slider/_shared.py +195 -0
  334. bootstack/widgets/_impl/composites/slider/rangeslider.py +982 -0
  335. bootstack/widgets/_impl/composites/slider/slider.py +851 -0
  336. bootstack/widgets/_impl/composites/spinnerentry.py +185 -0
  337. bootstack/widgets/_impl/composites/tableview/__init__.py +5 -0
  338. bootstack/widgets/_impl/composites/tableview/tableview.py +3388 -0
  339. bootstack/widgets/_impl/composites/tableview/types.py +169 -0
  340. bootstack/widgets/_impl/composites/tabs/__init__.py +23 -0
  341. bootstack/widgets/_impl/composites/tabs/tabitem.py +389 -0
  342. bootstack/widgets/_impl/composites/tabs/tabs.py +974 -0
  343. bootstack/widgets/_impl/composites/tabs/tabview.py +650 -0
  344. bootstack/widgets/_impl/composites/textarea/__init__.py +26 -0
  345. bootstack/widgets/_impl/composites/textarea/change.py +46 -0
  346. bootstack/widgets/_impl/composites/textarea/codeeditor.py +526 -0
  347. bootstack/widgets/_impl/composites/textarea/core.py +495 -0
  348. bootstack/widgets/_impl/composites/textarea/decoration.py +42 -0
  349. bootstack/widgets/_impl/composites/textarea/diff.py +127 -0
  350. bootstack/widgets/_impl/composites/textarea/extensions/__init__.py +1 -0
  351. bootstack/widgets/_impl/composites/textarea/extensions/bracket_matcher.py +138 -0
  352. bootstack/widgets/_impl/composites/textarea/extensions/indent_guides.py +158 -0
  353. bootstack/widgets/_impl/composites/textarea/extensions/line_numbers.py +138 -0
  354. bootstack/widgets/_impl/composites/textarea/extensions/pygments_highlighter.py +312 -0
  355. bootstack/widgets/_impl/composites/textarea/extensions/smart_indent.py +177 -0
  356. bootstack/widgets/_impl/composites/textarea/filter.py +171 -0
  357. bootstack/widgets/_impl/composites/textarea/search_overlay.py +459 -0
  358. bootstack/widgets/_impl/composites/textarea/sidebar.py +88 -0
  359. bootstack/widgets/_impl/composites/textarea/style_registry.py +178 -0
  360. bootstack/widgets/_impl/composites/textarea/textarea.py +606 -0
  361. bootstack/widgets/_impl/composites/textarea/undo.py +217 -0
  362. bootstack/widgets/_impl/composites/textentry.py +57 -0
  363. bootstack/widgets/_impl/composites/timeentry.py +176 -0
  364. bootstack/widgets/_impl/composites/toast.py +390 -0
  365. bootstack/widgets/_impl/composites/toast_stack.py +156 -0
  366. bootstack/widgets/_impl/composites/togglegroup.py +418 -0
  367. bootstack/widgets/_impl/composites/toolbar.py +608 -0
  368. bootstack/widgets/_impl/composites/tooltip.py +491 -0
  369. bootstack/widgets/_impl/composites/tree/__init__.py +7 -0
  370. bootstack/widgets/_impl/composites/tree/source_binding.py +136 -0
  371. bootstack/widgets/_impl/composites/tree/treeitem.py +393 -0
  372. bootstack/widgets/_impl/composites/tree/treenode.py +174 -0
  373. bootstack/widgets/_impl/composites/tree/treeview.py +841 -0
  374. bootstack/widgets/_impl/mixins/__init__.py +24 -0
  375. bootstack/widgets/_impl/mixins/configure_mixin.py +216 -0
  376. bootstack/widgets/_impl/mixins/entry_mixin.py +134 -0
  377. bootstack/widgets/_impl/mixins/font_mixin.py +368 -0
  378. bootstack/widgets/_impl/mixins/icon_mixin.py +61 -0
  379. bootstack/widgets/_impl/mixins/localization_mixin.py +253 -0
  380. bootstack/widgets/_impl/mixins/signal_mixin.py +268 -0
  381. bootstack/widgets/_impl/mixins/validation_mixin.py +226 -0
  382. bootstack/widgets/_impl/primitives/__init__.py +49 -0
  383. bootstack/widgets/_impl/primitives/_menubutton.py +107 -0
  384. bootstack/widgets/_impl/primitives/badge.py +45 -0
  385. bootstack/widgets/_impl/primitives/button.py +76 -0
  386. bootstack/widgets/_impl/primitives/card.py +45 -0
  387. bootstack/widgets/_impl/primitives/checkbutton.py +124 -0
  388. bootstack/widgets/_impl/primitives/checktoggle.py +62 -0
  389. bootstack/widgets/_impl/primitives/combobox.py +156 -0
  390. bootstack/widgets/_impl/primitives/entry.py +87 -0
  391. bootstack/widgets/_impl/primitives/flexframe.py +448 -0
  392. bootstack/widgets/_impl/primitives/frame.py +185 -0
  393. bootstack/widgets/_impl/primitives/gridframe.py +546 -0
  394. bootstack/widgets/_impl/primitives/label.py +84 -0
  395. bootstack/widgets/_impl/primitives/labelframe.py +54 -0
  396. bootstack/widgets/_impl/primitives/optionmenu.py +387 -0
  397. bootstack/widgets/_impl/primitives/packframe.py +227 -0
  398. bootstack/widgets/_impl/primitives/panedwindow.py +45 -0
  399. bootstack/widgets/_impl/primitives/progressbar.py +83 -0
  400. bootstack/widgets/_impl/primitives/radiobutton.py +115 -0
  401. bootstack/widgets/_impl/primitives/radiotoggle.py +54 -0
  402. bootstack/widgets/_impl/primitives/scrollbar.py +42 -0
  403. bootstack/widgets/_impl/primitives/separator.py +43 -0
  404. bootstack/widgets/_impl/primitives/sizegrip.py +33 -0
  405. bootstack/widgets/_impl/primitives/spinbox.py +95 -0
  406. bootstack/widgets/_impl/primitives/switch.py +44 -0
  407. bootstack/widgets/_impl/primitives/treeview.py +69 -0
  408. bootstack/widgets/app.py +371 -0
  409. bootstack/widgets/appshell.py +1179 -0
  410. bootstack/widgets/avatar.py +140 -0
  411. bootstack/widgets/boolean_controls.py +455 -0
  412. bootstack/widgets/button.py +224 -0
  413. bootstack/widgets/buttongroup.py +239 -0
  414. bootstack/widgets/calendar.py +195 -0
  415. bootstack/widgets/card.py +159 -0
  416. bootstack/widgets/carousel.py +241 -0
  417. bootstack/widgets/chart.py +302 -0
  418. bootstack/widgets/codeeditor.py +675 -0
  419. bootstack/widgets/contextmenu.py +371 -0
  420. bootstack/widgets/datatable.py +688 -0
  421. bootstack/widgets/datefield.py +395 -0
  422. bootstack/widgets/divider.py +60 -0
  423. bootstack/widgets/expander.py +579 -0
  424. bootstack/widgets/form.py +200 -0
  425. bootstack/widgets/gallery.py +250 -0
  426. bootstack/widgets/gauge.py +168 -0
  427. bootstack/widgets/grid.py +121 -0
  428. bootstack/widgets/groupbox.py +162 -0
  429. bootstack/widgets/label.py +229 -0
  430. bootstack/widgets/listview.py +354 -0
  431. bootstack/widgets/menubutton.py +419 -0
  432. bootstack/widgets/numberfield.py +431 -0
  433. bootstack/widgets/pagestack.py +345 -0
  434. bootstack/widgets/passwordfield.py +383 -0
  435. bootstack/widgets/pathfield.py +454 -0
  436. bootstack/widgets/picture.py +251 -0
  437. bootstack/widgets/progressbar.py +106 -0
  438. bootstack/widgets/radio_variants.py +271 -0
  439. bootstack/widgets/radiogroup.py +228 -0
  440. bootstack/widgets/scrollbar.py +64 -0
  441. bootstack/widgets/scrollview.py +186 -0
  442. bootstack/widgets/select.py +302 -0
  443. bootstack/widgets/selectbutton.py +182 -0
  444. bootstack/widgets/sidebar_toggle.py +130 -0
  445. bootstack/widgets/sizegrip.py +42 -0
  446. bootstack/widgets/slider.py +408 -0
  447. bootstack/widgets/spinbox.py +147 -0
  448. bootstack/widgets/spinnerfield.py +413 -0
  449. bootstack/widgets/splash.py +367 -0
  450. bootstack/widgets/splitview.py +482 -0
  451. bootstack/widgets/stacks.py +249 -0
  452. bootstack/widgets/statusbar.py +189 -0
  453. bootstack/widgets/tabs.py +425 -0
  454. bootstack/widgets/textarea.py +459 -0
  455. bootstack/widgets/textfield.py +410 -0
  456. bootstack/widgets/theme_toggle.py +92 -0
  457. bootstack/widgets/timefield.py +340 -0
  458. bootstack/widgets/toast.py +314 -0
  459. bootstack/widgets/togglegroup.py +231 -0
  460. bootstack/widgets/toolbar.py +347 -0
  461. bootstack/widgets/tooltip.py +94 -0
  462. bootstack/widgets/tree.py +648 -0
  463. bootstack/widgets/types.py +305 -0
  464. bootstack/widgets/window.py +307 -0
  465. bootstack-0.1.0.dist-info/METADATA +301 -0
  466. bootstack-0.1.0.dist-info/RECORD +471 -0
  467. bootstack-0.1.0.dist-info/WHEEL +5 -0
  468. bootstack-0.1.0.dist-info/entry_points.txt +2 -0
  469. bootstack-0.1.0.dist-info/licenses/LICENSE +21 -0
  470. bootstack-0.1.0.dist-info/licenses/NOTICE +10 -0
  471. bootstack-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,375 @@
1
+ """Scrolled text widget with configurable scrollbars."""
2
+ import tkinter
3
+ from typing import Any, Literal
4
+
5
+ from bootstack.widgets._impl.primitives.frame import Frame
6
+ from bootstack.widgets._impl.mixins.configure_mixin import configure_delegate
7
+ from bootstack.widgets._impl.primitives.scrollbar import Scrollbar
8
+ from bootstack.widgets.types import Master
9
+
10
+ ScrollDirection = Literal['horizontal', 'vertical', 'both']
11
+ ScrollbarVisibility = Literal['always', 'never', 'hover', 'scroll']
12
+
13
+
14
+ class ScrolledText(Frame):
15
+ """A text widget with configurable scrollbars and mouse wheel support.
16
+
17
+ The ScrolledText widget provides a Text widget with scrollbars that can be
18
+ configured to appear always, never, on hover, or when scrolling. Full mouse
19
+ wheel support is included.
20
+
21
+ This widget delegates all Text methods to the internal text widget, so it
22
+ can be used just like a standard Text widget with additional scrolling
23
+ functionality.
24
+ """
25
+
26
+ def __init__(
27
+ self,
28
+ master: Master = None,
29
+ padding: int = 0,
30
+ scroll_direction: ScrollDirection = 'vertical',
31
+ scrollbar_visibility: ScrollbarVisibility = 'always',
32
+ autohide_delay: int = 1000,
33
+ scrollbar_style: str = 'default',
34
+ **kwargs: Any,
35
+ ):
36
+ """
37
+ Args:
38
+ master: The parent widget.
39
+ padding: Padding around the frame container.
40
+ scroll_direction: Scroll direction — `'vertical'`, `'horizontal'`, or `'both'`.
41
+ Use `'both'` to enable horizontal scrolling with Shift+MouseWheel.
42
+ scrollbar_visibility: When scrollbars are shown — `'always'`, `'never'`,
43
+ `'hover'` (on mouse enter), or `'scroll'` (auto-hide after delay).
44
+ autohide_delay: Milliseconds before scrollbars hide in `'scroll'` mode.
45
+ Default is 1000.
46
+ scrollbar_style: Accent token for the scrollbars (e.g., `'primary'`).
47
+ **kwargs: Additional keyword arguments passed to the `Text` widget.
48
+ """
49
+ # Initialize Frame
50
+ super().__init__(master=master, padding=padding)
51
+
52
+ # Configuration
53
+ self._direction = scroll_direction
54
+ self._scrollbar_visibility = scrollbar_visibility
55
+ self._autohide_delay = autohide_delay
56
+ self._scrollbar_style = scrollbar_style
57
+ self._hide_timer = None
58
+
59
+ # Create unique bind tag for this scrolledtext
60
+ self._scroll_tag = f'ScrolledText_{id(self)}'
61
+
62
+ # Detect windowing system
63
+ self.winsys = self.tk.call("tk", "windowingsystem")
64
+
65
+ # Bind scroll events to our custom tag
66
+ self._setup_scroll_tag_bindings()
67
+
68
+ # Create text widget
69
+ text_kwargs = kwargs.copy()
70
+
71
+ # Set wrap mode based on direction
72
+ if scroll_direction == 'both' or scroll_direction == 'horizontal':
73
+ if 'wrap' not in text_kwargs:
74
+ text_kwargs['wrap'] = 'none'
75
+
76
+ self._text = tkinter.Text(self, **text_kwargs)
77
+
78
+ # Create scrollbars
79
+ self._vertical_scrollbar = Scrollbar(
80
+ master=self,
81
+ orient='vertical',
82
+ command=self._text.yview,
83
+ accent=scrollbar_style if scrollbar_style != 'default' else None
84
+ )
85
+ self._horizontal_scrollbar = Scrollbar(
86
+ master=self,
87
+ orient='horizontal',
88
+ command=self._text.xview,
89
+ accent=scrollbar_style if scrollbar_style != 'default' else None
90
+ )
91
+
92
+ # Configure text scrolling
93
+ if scroll_direction in ('vertical', 'both'):
94
+ self._text.configure(yscrollcommand=self._on_text_scroll_y)
95
+ if scroll_direction in ('horizontal', 'both'):
96
+ self._text.configure(xscrollcommand=self._on_text_scroll_x)
97
+
98
+ # Layout
99
+ self._layout_widgets()
100
+
101
+ # Bind events for autohide/hover
102
+ self._bind_container_events()
103
+
104
+ # Initial scrollbar visibility
105
+ self._update_scrollbar_visibility()
106
+
107
+ # Add scroll bindings to text widget
108
+ self._add_scroll_binding(self._text)
109
+
110
+ # Delegate text methods to this widget (except geometry managers)
111
+ for method in vars(tkinter.Text).keys():
112
+ if any(["pack" in method, "grid" in method, "place" in method]):
113
+ pass
114
+ else:
115
+ # Don't override methods that already exist
116
+ if not hasattr(self, method):
117
+ setattr(self, method, getattr(self._text, method))
118
+
119
+ @configure_delegate('scroll_direction')
120
+ def _delegate_scroll_direction(self, value=None):
121
+ """Get or set the scroll direction ('vertical', 'horizontal', or 'both')."""
122
+ if value is None:
123
+ return self._direction
124
+ else:
125
+ self._direction = value
126
+ # Update scrollbar visibility and layout
127
+ self._update_scrollbar_visibility()
128
+ return None
129
+
130
+ @configure_delegate('scrollbar_visibility')
131
+ def _delegate_scrollbar_visibility(self, value=None):
132
+ """Get or set the scrollbar visibility mode ('always', 'never', 'hover', 'scroll')."""
133
+ if value is None:
134
+ return self._scrollbar_visibility
135
+ else:
136
+ old_value = self._scrollbar_visibility
137
+ self._scrollbar_visibility = value
138
+
139
+ # Unbind old events if changing from hover
140
+ if old_value == 'hover':
141
+ self.unbind('<Enter>')
142
+ self.unbind('<Leave>')
143
+ self._text.unbind('<Enter>')
144
+ self._text.unbind('<Leave>')
145
+ self._vertical_scrollbar.unbind('<Enter>')
146
+ self._vertical_scrollbar.unbind('<Leave>')
147
+ self._horizontal_scrollbar.unbind('<Enter>')
148
+ self._horizontal_scrollbar.unbind('<Leave>')
149
+
150
+ # Bind new events and update scrollbar visibility
151
+ self._bind_container_events()
152
+ self._update_scrollbar_visibility()
153
+ return None
154
+
155
+ @configure_delegate('autohide_delay')
156
+ def _delegate_autohide_delay(self, value=None):
157
+ """Get or set the milliseconds before scrollbars hide in 'scroll' mode."""
158
+ if value is None:
159
+ return self._autohide_delay
160
+ else:
161
+ self._autohide_delay = value
162
+ return None
163
+
164
+ @configure_delegate('scrollbar_style')
165
+ def _delegate_scrollbar_style(self, value=None):
166
+ """Get or set the accent token applied to both scrollbars."""
167
+ if value is None:
168
+ return self._scrollbar_style
169
+ else:
170
+ self._scrollbar_style = value
171
+ # Apply the new accent to both scrollbars
172
+ if value and value != 'default':
173
+ self._vertical_scrollbar.configure(accent=value)
174
+ self._horizontal_scrollbar.configure(accent=value)
175
+ return None
176
+
177
+ def _setup_scroll_tag_bindings(self):
178
+ """Setup bindings on our custom bind tag."""
179
+ if self.winsys.lower() == "x11":
180
+ self.bind_class(self._scroll_tag, "<Button-4>", self._on_mousewheel)
181
+ self.bind_class(self._scroll_tag, "<Button-5>", self._on_mousewheel)
182
+ self.bind_class(self._scroll_tag, "<Shift-Button-4>", self._on_shift_mousewheel)
183
+ self.bind_class(self._scroll_tag, "<Shift-Button-5>", self._on_shift_mousewheel)
184
+ else:
185
+ self.bind_class(self._scroll_tag, "<MouseWheel>", self._on_mousewheel)
186
+ self.bind_class(self._scroll_tag, "<Shift-MouseWheel>", self._on_shift_mousewheel)
187
+
188
+ def _layout_widgets(self):
189
+ """Layout the text widget and scrollbars."""
190
+ self._text.grid(row=0, column=0, sticky='nsew')
191
+
192
+ if self._direction in ('vertical', 'both'):
193
+ self._vertical_scrollbar.grid(row=0, column=1, sticky='ns')
194
+
195
+ if self._direction in ('horizontal', 'both'):
196
+ self._horizontal_scrollbar.grid(row=1, column=0, sticky='ew')
197
+
198
+ # Configure grid weights
199
+ self.grid_rowconfigure(0, weight=1)
200
+ self.grid_columnconfigure(0, weight=1)
201
+
202
+ # Initially hide scrollbars based on scrollbar_visibility setting
203
+ if self._scrollbar_visibility == 'never':
204
+ self._vertical_scrollbar.grid_remove()
205
+ self._horizontal_scrollbar.grid_remove()
206
+ elif self._scrollbar_visibility in ('hover', 'scroll'):
207
+ self._vertical_scrollbar.grid_remove()
208
+ self._horizontal_scrollbar.grid_remove()
209
+
210
+ def _bind_container_events(self):
211
+ """Bind events for the container (enter/leave for autohide)."""
212
+ if self._scrollbar_visibility == 'hover':
213
+ self.bind('<Enter>', self._on_container_enter)
214
+ self.bind('<Leave>', self._on_container_leave)
215
+ self._text.bind('<Enter>', self._on_container_enter)
216
+ self._text.bind('<Leave>', self._on_container_leave)
217
+ self._vertical_scrollbar.bind('<Enter>', self._on_container_enter)
218
+ self._vertical_scrollbar.bind('<Leave>', self._on_container_leave)
219
+ self._horizontal_scrollbar.bind('<Enter>', self._on_container_enter)
220
+ self._horizontal_scrollbar.bind('<Leave>', self._on_container_leave)
221
+
222
+ def _on_container_enter(self, event):
223
+ """Handle mouse entering the container."""
224
+ if self._scrollbar_visibility == 'hover':
225
+ self._show_scrollbars()
226
+
227
+ def _on_container_leave(self, event):
228
+ """Handle mouse leaving the container."""
229
+ if self._scrollbar_visibility == 'hover':
230
+ self._hide_scrollbars()
231
+
232
+ def _show_scrollbars(self):
233
+ """Show scrollbars."""
234
+ if self._direction in ('vertical', 'both'):
235
+ self._vertical_scrollbar.grid()
236
+ if self._direction in ('horizontal', 'both'):
237
+ self._horizontal_scrollbar.grid()
238
+
239
+ def _hide_scrollbars(self):
240
+ """Hide scrollbars."""
241
+ self._vertical_scrollbar.grid_remove()
242
+ self._horizontal_scrollbar.grid_remove()
243
+
244
+ def _on_text_scroll_y(self, first, last):
245
+ """Update vertical scrollbar position."""
246
+ self._vertical_scrollbar.set(first, last)
247
+
248
+ def _on_text_scroll_x(self, first, last):
249
+ """Update horizontal scrollbar position."""
250
+ self._horizontal_scrollbar.set(first, last)
251
+
252
+ def _update_scrollbar_visibility(self):
253
+ """Update scrollbar visibility based on current mode."""
254
+ if self._scrollbar_visibility == 'always':
255
+ self._show_scrollbars()
256
+ elif self._scrollbar_visibility == 'never':
257
+ self._hide_scrollbars()
258
+
259
+ def _on_mousewheel(self, event):
260
+ """Handle vertical mouse wheel scrolling."""
261
+ # Show scrollbar temporarily in scroll mode
262
+ if self._scrollbar_visibility == 'scroll':
263
+ self._show_scrollbars()
264
+ if self._hide_timer:
265
+ self.after_cancel(self._hide_timer)
266
+ self._hide_timer = self.after(self._autohide_delay, self._hide_scrollbars)
267
+
268
+ # Calculate delta based on platform
269
+ delta = 0
270
+ if self.winsys.lower() == "win32":
271
+ delta = -int(event.delta / 120)
272
+ elif self.winsys.lower() == "aqua":
273
+ delta = -event.delta
274
+ elif event.num == 4:
275
+ delta = -1
276
+ elif event.num == 5:
277
+ delta = 1
278
+
279
+ # Scroll vertically
280
+ if self._direction in ('vertical', 'both') and delta != 0:
281
+ self._text.yview_scroll(delta, 'units')
282
+
283
+ def _on_shift_mousewheel(self, event):
284
+ """Handle horizontal mouse wheel scrolling (Shift+MouseWheel)."""
285
+ # Show scrollbar temporarily in scroll mode
286
+ if self._scrollbar_visibility == 'scroll':
287
+ self._show_scrollbars()
288
+ if self._hide_timer:
289
+ self.after_cancel(self._hide_timer)
290
+ self._hide_timer = self.after(self._autohide_delay, self._hide_scrollbars)
291
+
292
+ # Calculate delta based on platform
293
+ delta = 0
294
+ if self.winsys.lower() == "win32":
295
+ delta = -int(event.delta / 120)
296
+ elif self.winsys.lower() == "aqua":
297
+ delta = -event.delta
298
+ elif event.num == 4:
299
+ delta = -1
300
+ elif event.num == 5:
301
+ delta = 1
302
+
303
+ # Scroll horizontally
304
+ if self._direction in ('horizontal', 'both') and delta != 0:
305
+ self._text.xview_scroll(delta, 'units')
306
+
307
+ def _add_scroll_binding(self, widget):
308
+ """Add scroll bind tag to widget."""
309
+ try:
310
+ tags = list(widget.bindtags())
311
+ if self._scroll_tag not in tags:
312
+ if len(tags) >= 2:
313
+ tags.insert(1, self._scroll_tag)
314
+ else:
315
+ tags.append(self._scroll_tag)
316
+ widget.bindtags(tuple(tags))
317
+ except:
318
+ pass
319
+
320
+ def destroy(self):
321
+ """Clean up resources and destroy the widget."""
322
+ # Cancel any pending timer
323
+ if self._hide_timer:
324
+ self.after_cancel(self._hide_timer)
325
+ self._hide_timer = None
326
+
327
+ # Unbind class bindings for the scroll tag
328
+ if self.winsys.lower() == "x11":
329
+ self.unbind_class(self._scroll_tag, "<Button-4>")
330
+ self.unbind_class(self._scroll_tag, "<Button-5>")
331
+ self.unbind_class(self._scroll_tag, "<Shift-Button-4>")
332
+ self.unbind_class(self._scroll_tag, "<Shift-Button-5>")
333
+ else:
334
+ self.unbind_class(self._scroll_tag, "<MouseWheel>")
335
+ self.unbind_class(self._scroll_tag, "<Shift-MouseWheel>")
336
+
337
+ # Call parent destroy
338
+ super().destroy()
339
+
340
+ def __getattr__(self, name: str) -> Any:
341
+ """Delegate unknown attribute access to the internal Text widget.
342
+
343
+ Args:
344
+ name: The attribute name to access.
345
+
346
+ Returns:
347
+ The attribute from the internal Text widget.
348
+
349
+ Raises:
350
+ AttributeError: If _text doesn't exist yet or doesn't have the attribute.
351
+ """
352
+ # Avoid infinite recursion during initialization
353
+ if '_text' not in self.__dict__:
354
+ raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'")
355
+ return getattr(self._text, name)
356
+
357
+ @property
358
+ def vertical_scrollbar(self) -> Scrollbar:
359
+ """The vertical scrollbar widget."""
360
+ return self._vertical_scrollbar
361
+
362
+ @property
363
+ def horizontal_scrollbar(self) -> Scrollbar:
364
+ """The horizontal scrollbar widget."""
365
+ return self._horizontal_scrollbar
366
+
367
+ @property
368
+ def text(self):
369
+ """Get the internal text widget.
370
+
371
+ Returns:
372
+ The underlying Text widget instance.
373
+ """
374
+ return self._text
375
+
@@ -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: ...