ttkbootstrap 2.1.0__tar.gz → 2.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. {ttkbootstrap-2.1.0/src/ttkbootstrap.egg-info → ttkbootstrap-2.2.0}/PKG-INFO +36 -3
  2. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/README.md +35 -2
  3. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/pyproject.toml +13 -2
  4. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/__init__.py +19 -0
  5. ttkbootstrap-2.2.0/src/ttkbootstrap/__init__.pyi +2021 -0
  6. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/__main__.py +7 -1
  7. ttkbootstrap-2.2.0/src/ttkbootstrap/cli.py +124 -0
  8. ttkbootstrap-2.2.0/src/ttkbootstrap/convert_theme.py +323 -0
  9. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/engine.py +13 -1
  10. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/theme.py +38 -12
  11. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/themes/legacy.py +22 -10
  12. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0/src/ttkbootstrap.egg-info}/PKG-INFO +36 -3
  13. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap.egg-info/SOURCES.txt +7 -0
  14. ttkbootstrap-2.2.0/src/ttkbootstrap.egg-info/entry_points.txt +3 -0
  15. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkcreator/__main__.py +7 -2
  16. ttkbootstrap-2.2.0/tests/test_cli_api.py +182 -0
  17. ttkbootstrap-2.2.0/tests/test_convert_theme.py +317 -0
  18. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_scaling.py +61 -0
  19. ttkbootstrap-2.2.0/tests/test_widget_stubs.py +299 -0
  20. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/LICENSE +0 -0
  21. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/MANIFEST.in +0 -0
  22. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/setup.cfg +0 -0
  23. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/__init__.py +0 -0
  24. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/app_icons/ttkbootstrap.ico +0 -0
  25. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/app_icons/ttkbootstrap.png +0 -0
  26. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/README.md +0 -0
  27. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/__init__.py +0 -0
  28. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/checkbox-checked.png +0 -0
  29. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/checkbox-indeterminate.png +0 -0
  30. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/checkbox-unchecked.png +0 -0
  31. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/manifest.json +0 -0
  32. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/progressbar-default.png +0 -0
  33. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/progressbar-thin.png +0 -0
  34. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/radio.png +0 -0
  35. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/sizegrip.png +0 -0
  36. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/slider-handle.png +0 -0
  37. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/slider-track.png +0 -0
  38. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/switch-round.png +0 -0
  39. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/elements/switch-square.png +0 -0
  40. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/icons/LICENSE +0 -0
  41. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/icons/README.md +0 -0
  42. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/icons/bootstrap.ttf +0 -0
  43. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/icons/glyphmap.json +0 -0
  44. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/assets/icons/icon_metrics.json +0 -0
  45. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/colorutils.py +0 -0
  46. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/constants.py +0 -0
  47. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/dialogs/__init__.py +0 -0
  48. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/dialogs/base.py +0 -0
  49. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/dialogs/colorchooser.py +0 -0
  50. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/dialogs/colordropper.py +0 -0
  51. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/dialogs/datepicker.py +0 -0
  52. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/dialogs/filedialog.py +0 -0
  53. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/dialogs/fontdialog.py +0 -0
  54. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/dialogs/message.py +0 -0
  55. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/dialogs/query.py +0 -0
  56. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/internal/__init__.py +0 -0
  57. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/internal/busy.py +0 -0
  58. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/internal/configure_delegation.py +0 -0
  59. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/internal/positioning.py +0 -0
  60. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/internal/publisher.py +0 -0
  61. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/internal/utility.py +0 -0
  62. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/internal/wheel.py +0 -0
  63. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/localization/README.md +0 -0
  64. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/localization/__init__.py +0 -0
  65. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/localization/api.py +0 -0
  66. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/localization/msgcat.py +0 -0
  67. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/localization/msgs.py +0 -0
  68. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/menu.py +0 -0
  69. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/publisher.py +0 -0
  70. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/py.typed +0 -0
  71. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/__init__.py +0 -0
  72. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/_compat.py +0 -0
  73. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/assets.py +0 -0
  74. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/bootstyle.py +0 -0
  75. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/__init__.py +0 -0
  76. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/button.py +0 -0
  77. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/calendar.py +0 -0
  78. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/checkbutton.py +0 -0
  79. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/combobox.py +0 -0
  80. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/entry.py +0 -0
  81. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/floodgauge.py +0 -0
  82. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/frame.py +0 -0
  83. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/label.py +0 -0
  84. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/labelframe.py +0 -0
  85. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/menubutton.py +0 -0
  86. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/notebook.py +0 -0
  87. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/panedwindow.py +0 -0
  88. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/progressbar.py +0 -0
  89. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/radiobutton.py +0 -0
  90. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/registry.py +0 -0
  91. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/scale.py +0 -0
  92. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/scrollbar.py +0 -0
  93. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/separator.py +0 -0
  94. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/sizegrip.py +0 -0
  95. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/spinbox.py +0 -0
  96. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/toggle.py +0 -0
  97. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/toolbutton.py +0 -0
  98. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/treeview.py +0 -0
  99. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders/utils.py +0 -0
  100. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders_tk.py +0 -0
  101. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/builders_ttk.py +0 -0
  102. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/elements.py +0 -0
  103. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/icons.py +0 -0
  104. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/layout.py +0 -0
  105. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/style/scaling.py +0 -0
  106. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/themes/__init__.py +0 -0
  107. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/themes/builtin.py +0 -0
  108. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/themes/standard.py +0 -0
  109. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/utility.py +0 -0
  110. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/utils/__init__.py +0 -0
  111. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/utils/color.py +0 -0
  112. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/utils/config.py +0 -0
  113. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/utils/fonts.py +0 -0
  114. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/utils/platform.py +0 -0
  115. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/utils/scaling.py +0 -0
  116. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/validation.py +0 -0
  117. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/widgets/__init__.py +0 -0
  118. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/widgets/dateentry.py +0 -0
  119. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/widgets/floodgauge.py +0 -0
  120. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/widgets/labeledscale.py +0 -0
  121. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/widgets/meter.py +0 -0
  122. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/widgets/scrolled.py +0 -0
  123. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/widgets/tableview.py +0 -0
  124. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/widgets/toast.py +0 -0
  125. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/widgets/tooltip.py +0 -0
  126. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap/window.py +0 -0
  127. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap.egg-info/dependency_links.txt +0 -0
  128. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap.egg-info/requires.txt +0 -0
  129. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkbootstrap.egg-info/top_level.txt +0 -0
  130. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/src/ttkcreator/__init__.py +0 -0
  131. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_bootstyle_grammar.py +0 -0
  132. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_bootstyle_value_tokens.py +0 -0
  133. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_busy_api.py +0 -0
  134. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_config_api.py +0 -0
  135. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_configure_delegation.py +0 -0
  136. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_dateentry_api.py +0 -0
  137. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_dialogs_api.py +0 -0
  138. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_durable_style_options.py +0 -0
  139. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_filedialog_api.py +0 -0
  140. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_floodgauge_api.py +0 -0
  141. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_fonts_api.py +0 -0
  142. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_icon_drop.py +0 -0
  143. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_icon_theme.py +0 -0
  144. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_labeledscale_tooltip_api.py +0 -0
  145. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_menu_api.py +0 -0
  146. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_menu_border.py +0 -0
  147. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_meter_api.py +0 -0
  148. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_mixin_api.py +0 -0
  149. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_scroll_events.py +0 -0
  150. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_scrolled_api.py +0 -0
  151. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_style_package.py +0 -0
  152. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_style_reference.py +0 -0
  153. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_surface_color.py +0 -0
  154. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_surface_families.py +0 -0
  155. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_surface_grammar.py +0 -0
  156. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_tableview_api.py +0 -0
  157. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_toast_api.py +0 -0
  158. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_toolkit.py +0 -0
  159. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_treeview_rowheight.py +0 -0
  160. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_utility_api.py +0 -0
  161. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_widget_catalog_coverage.py +0 -0
  162. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_widget_reexports.py +0 -0
  163. {ttkbootstrap-2.1.0 → ttkbootstrap-2.2.0}/tests/test_window_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ttkbootstrap
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: A supercharged theme extension for tkinter that enables on-demand modern flat style themes inspired by Bootstrap.
5
5
  Author-email: Israel Dryer <israel.dryer@gmail.com>
6
6
  License-Expression: MIT AND (Apache-2.0 OR BSD-2-Clause)
@@ -66,6 +66,12 @@ tkinter's, and everything you already know about tkinter still applies.
66
66
  python -m pip install ttkbootstrap
67
67
  ```
68
68
 
69
+ Then see it running — this opens a window with every widget and a theme picker:
70
+
71
+ ```bash
72
+ ttkb demo
73
+ ```
74
+
69
75
  ## Quickstart
70
76
 
71
77
  ```python
@@ -115,6 +121,26 @@ app.toggle_theme() # flip light <-> dark
115
121
  Browse them in the
116
122
  [themes gallery](https://ttkbootstrap.readthedocs.io/en/latest/themes.html).
117
123
 
124
+ Design your own with the bundled editor — pick colors, preview them on live
125
+ widgets, and export a `Theme(...)` snippet for your app:
126
+
127
+ ```bash
128
+ ttkb creator
129
+ ```
130
+
131
+ ## Command line
132
+
133
+ Installing ttkbootstrap installs `ttkb`:
134
+
135
+ | Command | What it does |
136
+ | --- | --- |
137
+ | `ttkb version` | Print the installed version |
138
+ | `ttkb demo` | Open the widget demo |
139
+ | `ttkb convert-theme <file>` | Convert a 1.x theme file to the 2.x `Theme(...)` form |
140
+ | `ttkb creator` | Open ttkcreator, the theme designer |
141
+
142
+ See the [command-line reference](https://ttkbootstrap.readthedocs.io/en/latest/reference/cli.html).
143
+
118
144
  ## Documentation
119
145
 
120
146
  - **[Documentation](https://ttkbootstrap.readthedocs.io/en/latest/)** — guides, the widget catalog, and the API reference.
@@ -131,6 +157,13 @@ deprecation warning. The
131
157
  [Migrating to 2.0](https://ttkbootstrap.readthedocs.io/en/latest/user-guide/getting-started/migrating.html)
132
158
  guide sorts every change into breaking / deprecated / notable / new.
133
159
 
160
+ Custom themes moved out of the package and into your own code. To bring one
161
+ forward, convert the file 1.x saved:
162
+
163
+ ```bash
164
+ ttkb convert-theme user.py -o brand.py
165
+ ```
166
+
134
167
  ## Icons
135
168
 
136
169
  ttkbootstrap ships with the full [Bootstrap Icons](https://icons.getbootstrap.com/)
@@ -142,8 +175,8 @@ ttk.Button(app, text="Settings", icon="gear-fill", bootstyle="primary")
142
175
  ```
143
176
 
144
177
  Need other icon families — Font Awesome, Material, Lucide, and more? The
145
- [ttkbootstrap-icons](https://github.com/israel-dryer/ttkbootstrap-icons) extension
146
- is still available and adds installable icon providers alongside the built-in set.
178
+ [tkinter-icons](https://github.com/israel-dryer/tkinter-icons) extension adds
179
+ sixteen icon sets (61,000+ icons) alongside the built-in set.
147
180
 
148
181
  ## Contributing
149
182
 
@@ -39,6 +39,12 @@ tkinter's, and everything you already know about tkinter still applies.
39
39
  python -m pip install ttkbootstrap
40
40
  ```
41
41
 
42
+ Then see it running — this opens a window with every widget and a theme picker:
43
+
44
+ ```bash
45
+ ttkb demo
46
+ ```
47
+
42
48
  ## Quickstart
43
49
 
44
50
  ```python
@@ -88,6 +94,26 @@ app.toggle_theme() # flip light <-> dark
88
94
  Browse them in the
89
95
  [themes gallery](https://ttkbootstrap.readthedocs.io/en/latest/themes.html).
90
96
 
97
+ Design your own with the bundled editor — pick colors, preview them on live
98
+ widgets, and export a `Theme(...)` snippet for your app:
99
+
100
+ ```bash
101
+ ttkb creator
102
+ ```
103
+
104
+ ## Command line
105
+
106
+ Installing ttkbootstrap installs `ttkb`:
107
+
108
+ | Command | What it does |
109
+ | --- | --- |
110
+ | `ttkb version` | Print the installed version |
111
+ | `ttkb demo` | Open the widget demo |
112
+ | `ttkb convert-theme <file>` | Convert a 1.x theme file to the 2.x `Theme(...)` form |
113
+ | `ttkb creator` | Open ttkcreator, the theme designer |
114
+
115
+ See the [command-line reference](https://ttkbootstrap.readthedocs.io/en/latest/reference/cli.html).
116
+
91
117
  ## Documentation
92
118
 
93
119
  - **[Documentation](https://ttkbootstrap.readthedocs.io/en/latest/)** — guides, the widget catalog, and the API reference.
@@ -104,6 +130,13 @@ deprecation warning. The
104
130
  [Migrating to 2.0](https://ttkbootstrap.readthedocs.io/en/latest/user-guide/getting-started/migrating.html)
105
131
  guide sorts every change into breaking / deprecated / notable / new.
106
132
 
133
+ Custom themes moved out of the package and into your own code. To bring one
134
+ forward, convert the file 1.x saved:
135
+
136
+ ```bash
137
+ ttkb convert-theme user.py -o brand.py
138
+ ```
139
+
107
140
  ## Icons
108
141
 
109
142
  ttkbootstrap ships with the full [Bootstrap Icons](https://icons.getbootstrap.com/)
@@ -115,8 +148,8 @@ ttk.Button(app, text="Settings", icon="gear-fill", bootstyle="primary")
115
148
  ```
116
149
 
117
150
  Need other icon families — Font Awesome, Material, Lucide, and more? The
118
- [ttkbootstrap-icons](https://github.com/israel-dryer/ttkbootstrap-icons) extension
119
- is still available and adds installable icon providers alongside the built-in set.
151
+ [tkinter-icons](https://github.com/israel-dryer/tkinter-icons) extension adds
152
+ sixteen icon sets (61,000+ icons) alongside the built-in set.
120
153
 
121
154
  ## Contributing
122
155
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ttkbootstrap"
7
- version = "2.1.0"
7
+ version = "2.2.0"
8
8
  description = "A supercharged theme extension for tkinter that enables on-demand modern flat style themes inspired by Bootstrap."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -49,6 +49,13 @@ dependencies = ["pillow>=10,<13"]
49
49
  Homepage = "https://github.com/israel-dryer/ttkbootstrap"
50
50
  Documentation = "https://ttkbootstrap.readthedocs.io/en/latest/"
51
51
 
52
+ [project.scripts]
53
+ # Two names for one command: `ttkbootstrap` is guessable from the package name,
54
+ # `ttkb` is what anyone types twice. When the scripts directory is not on PATH,
55
+ # `python -m ttkbootstrap.cli <command>` runs the same thing.
56
+ ttkbootstrap = "ttkbootstrap.cli:main"
57
+ ttkb = "ttkbootstrap.cli:main"
58
+
52
59
  [tool.setuptools.packages.find]
53
60
  where = ["src"]
54
61
 
@@ -56,7 +63,11 @@ where = ["src"]
56
63
  # app_icons ships only the two runtime assets built by tools/make_app_ico.py
57
64
  # (the .ico for Windows, the .png for macOS/Linux). The per-size source PNGs live
58
65
  # in the repo-root assets/app_icons/ and are build inputs, not shipped.
59
- "ttkbootstrap" = ["themes/*.json", "assets/*", "assets/icons/*", "assets/elements/*", "assets/app_icons/ttkbootstrap.ico", "assets/app_icons/ttkbootstrap.png"]
66
+ # py.typed and the generated __init__.pyi are listed explicitly: MANIFEST.in's
67
+ # graft already sweeps them in, but the stub is what restores widget parameters
68
+ # in an IDE (#1327), so a wheel that quietly ships without it is a silent
69
+ # regression rather than a visible failure.
70
+ "ttkbootstrap" = ["py.typed", "*.pyi", "themes/*.json", "assets/*", "assets/icons/*", "assets/elements/*", "assets/app_icons/ttkbootstrap.ico", "assets/app_icons/ttkbootstrap.png"]
60
71
 
61
72
  [tool.pytest.ini_options]
62
73
  # Only the headless suite under tests/ is collected. Interactive mainloop()
@@ -37,6 +37,11 @@ bootstyle)`.
37
37
 
38
38
  For more information, see: https://ttkbootstrap.readthedocs.io/
39
39
  """
40
+ from importlib.metadata import (
41
+ PackageNotFoundError as _PackageNotFoundError,
42
+ version as _distribution_version,
43
+ )
44
+
40
45
  from tkinter import (
41
46
  Menu as _tkMenu, Text as _tkText, Canvas as _tkCanvas, Tk as _tkTk,
42
47
  Frame as _tkFrame, Label as _tkLabel,
@@ -100,6 +105,20 @@ from ttkbootstrap.utils import (
100
105
  set_global_family,
101
106
  )
102
107
 
108
+ try:
109
+ #: The installed distribution's version, e.g. `"2.2.0"`.
110
+ #
111
+ # Read from the installed metadata rather than written here, so
112
+ # `pyproject.toml` stays the one place the version literal lives. The
113
+ # consequence is that this reports what was *installed*: an editable install
114
+ # keeps whatever metadata it was built with until it is reinstalled.
115
+ __version__ = _distribution_version("ttkbootstrap")
116
+ except _PackageNotFoundError:
117
+ # Running from a source tree that was never installed (e.g. PYTHONPATH=src)
118
+ # -- there is no metadata to read, and guessing one would be worse than
119
+ # saying so.
120
+ __version__ = "unknown"
121
+
103
122
 
104
123
  # --------------------------------------------------------------------------- #
105
124
  # Concrete ttk widget classes — the blessed `bootstyle` set.