Modern themes for Tkinter. Sleek, responsive styles inspired by Bootstrap. Includes ready-to-use widgets, 30+ themes, and tools for building beautiful, cross-platform desktop apps with ease.
This report presents the forensic synthetic code analysis of israel-dryer/ttkbootstrap, a Python project with 2,647 GitHub stars. SynthScan v2.0 examined 80,080 lines of code across 293 source files, recording 1513 pattern matches distributed across 14 syntactic categories. The overall adjusted score of 28.1 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1513 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | gallery/stopwatch.py | 32 | def create_stopwatch_controls(self): | CODE |
| LOW | tests/test_scroll_events.py | 63 | def test_one_notch_is_one_unit(root): | CODE |
| LOW | tests/test_scroll_events.py | 76 | def test_precise_deltas_unpack_both_signed_axes(): | CODE |
| LOW | tests/test_scroll_events.py | 86 | def test_pixel_accumulator_carries_the_remainder(): | CODE |
| LOW⚡ | tests/test_scroll_events.py | 104 | def test_wheel_is_bound_on_every_platform(root): | CODE |
| LOW⚡ | tests/test_scroll_events.py | 113 | def test_touchpad_scroll_is_bound(root): | CODE |
| LOW⚡ | tests/test_scroll_events.py | 119 | def test_one_notch_scrolls_one_unit_not_to_the_end(root): | CODE |
| LOW | tests/test_scroll_events.py | 130 | def test_wheel_does_not_scroll_content_that_fits(root): | CODE |
| LOW | tests/test_scroll_events.py | 139 | def test_touchpad_gesture_scrolls_the_canvas(root): | CODE |
| LOW | tests/test_scroll_events.py | 153 | def test_destroy_unbinds_the_wheel_tag(root): | CODE |
| LOW⚡ | tests/test_toolkit.py | 38 | def test_statespec_splits_and_validates(): | CODE |
| LOW⚡ | tests/test_toolkit.py | 45 | def test_statespec_raises_on_typo(): | CODE |
| LOW⚡ | tests/test_toolkit.py | 54 | def test_el_lowers_to_ttk_tuple(): | CODE |
| LOW | tests/test_toolkit.py | 67 | def test_el_expand_and_border_options(): | CODE |
| LOW | tests/test_toolkit.py | 73 | def test_stylename_default_to_primary(): | CODE |
| LOW | tests/test_toolkit.py | 85 | def test_stylename_color_and_orient(): | CODE |
| LOW⚡ | tests/test_toolkit.py | 99 | def test_circle_key_completeness(root): | CODE |
| LOW⚡ | tests/test_toolkit.py | 108 | def test_circle_outline_and_width_in_key(root): | CODE |
| LOW⚡ | tests/test_toolkit.py | 115 | def test_odd_size_stays_exact(root): | CODE |
| LOW⚡ | tests/test_toolkit.py | 124 | def test_rect_keeps_exact_size(root): | CODE |
| LOW⚡ | tests/test_toolkit.py | 132 | def test_image_escape_hatch_keys_on_parts(root): | CODE |
| LOW⚡ | tests/test_toolkit.py | 148 | def test_image_element_validates_states(root): | CODE |
| LOW⚡ | tests/test_toolkit.py | 156 | def test_state_map_validates_states(root): | CODE |
| LOW⚡ | tests/test_toolkit.py | 161 | def test_layout_applies_el_tree(root): | CODE |
| LOW | tests/test_toolkit.py | 175 | def test_register_style_marks_style_known(root): | CODE |
| LOW | tests/test_toolkit.py | 183 | def test_layout_auto_registers(root): | CODE |
| LOW | tests/test_toolkit.py | 194 | def test_registered_style_is_honored_via_style_kwarg(root): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 141 | def test_use_native_filedialog_explicit_wins(): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 152 | def test_use_native_filedialog_none_is_platform_aware(monkeypatch, winsys, native): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 158 | def test_use_native_filedialog_no_root_defaults_native(monkeypatch): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 164 | def test_native_false_routes_to_themed(monkeypatch): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 249 | def test_open_nonexistent_typed_name_does_not_accept(root, tmp_path): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 257 | def test_go_up_navigates_to_parent(root, tmp_path): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 264 | def test_save_new_name_accepts_joined_path(root, tmp_path): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 271 | def test_save_applies_default_extension(root, tmp_path): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 278 | def test_save_overwrite_confirmed(root, tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 304 | def test_directory_mode_lists_only_dirs(root, tmp_path): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 311 | def test_directory_selecting_returns_dir(root, tmp_path): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 320 | def test_directory_no_selection_returns_cwd(root, tmp_path): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 374 | def test_listing_uses_taller_scoped_rowheight(root, tmp_path): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 384 | def test_rowheight_not_captured_as_user_override(root, tmp_path): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 392 | def test_window_sizes_to_content_not_clipped(root, tmp_path): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 514 | def test_footprint_is_the_size_build_applied(root, tmp_path): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 519 | def test_locate_falls_back_to_centering_for_a_malformed_position(root, tmp_path): | CODE |
| LOW⚡ | tests/test_filedialog_api.py | 527 | def test_multiple_open_returns_tuple(root, tmp_path): | CODE |
| LOW | tests/test_filedialog_api.py | 41 | def test_normalize_filetypes_forms(): | CODE |
| LOW | tests/test_filedialog_api.py | 57 | def test_normalize_filetypes_empty(): | CODE |
| LOW | tests/test_filedialog_api.py | 62 | def test_normalize_filetypes_accepts_mac_type_triple(): | CODE |
| LOW | tests/test_filedialog_api.py | 94 | def test_list_directory_filters_and_sorts(tmp_path): | CODE |
| LOW | tests/test_filedialog_api.py | 118 | def test_list_directory_unreadable_returns_empty(): | CODE |
| LOW | tests/test_filedialog_api.py | 124 | def test_ancestors_reaches_root(): | CODE |
| LOW | tests/test_filedialog_api.py | 186 | def test_native_false_routes_multiple(monkeypatch): | CODE |
| LOW | tests/test_filedialog_api.py | 220 | def test_open_selecting_a_file_accepts_its_path(root, tmp_path): | CODE |
| LOW | tests/test_filedialog_api.py | 237 | def test_open_double_click_directory_navigates(root, tmp_path): | CODE |
| LOW | tests/test_filedialog_api.py | 291 | def test_save_overwrite_declined_stays_open(root, tmp_path, monkeypatch): | CODE |
| LOW | tests/test_filedialog_api.py | 335 | def test_show_hidden_toggle_relists(root, tmp_path): | CODE |
| LOW | tests/test_filedialog_api.py | 345 | def test_result_uses_forward_slashes_like_native(root, tmp_path): | CODE |
| LOW | tests/test_filedialog_api.py | 358 | def test_row_icon_swaps_on_selection(root, tmp_path): | CODE |
| LOW | tests/test_filedialog_api.py | 404 | def test_build_without_a_parent_finds_the_default_root(root, tmp_path): | CODE |
| LOW | tests/test_filedialog_api.py | 416 | def test_build_without_any_root_reports_why(monkeypatch, root, tmp_path): | CODE |
| 775 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_filedialog_api.py | 137 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_filedialog_api.py | 139 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_filedialog_api.py | 24 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_filedialog_api.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_filedialog_api.py | 202 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_filedialog_api.py | 204 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 22 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 24 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 42 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 44 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 70 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 72 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 81 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 83 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 90 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 92 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 144 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 146 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 180 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 182 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 202 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 204 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 221 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 223 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 242 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tableview_api.py | 244 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_icon_theme.py | 24 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_icon_theme.py | 26 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_icon_theme.py | 88 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_icon_theme.py | 90 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_icon_theme.py | 119 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_icon_theme.py | 121 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_icon_theme.py | 141 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_icon_theme.py | 143 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 24 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 26 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 59 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 61 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 97 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 99 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 211 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 213 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 404 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 406 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 456 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 458 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 476 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 478 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 530 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 532 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 560 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 562 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 606 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_window_api.py | 608 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utility_api.py | 18 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utility_api.py | 20 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utility_api.py | 56 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utility_api.py | 58 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utility_api.py | 79 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utility_api.py | 81 | # -------------------------------------------------------------------------- | COMMENT |
| 130 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/generate_style_reference.py | 32 | CODE | |
| LOW | tools/generate_icon_metrics.py | 22 | CODE | |
| LOW | tools/verify_hover.py | 33 | CODE | |
| LOW | tools/generate_bootstyle_reference.py | 26 | CODE | |
| LOW | tools/generate_widget_stubs.py | 37 | CODE | |
| LOW | gallery/pc_cleaner.py | 8 | CODE | |
| LOW | gallery/long_running_determinate.py | 7 | CODE | |
| LOW | gallery/equalizer.py | 6 | CODE | |
| LOW | gallery/collapsing_frame.py | 7 | CODE | |
| LOW | gallery/media_player.py | 8 | CODE | |
| LOW | gallery/long_running_indeterminate.py | 7 | CODE | |
| LOW | gallery/stopwatch.py | 7 | CODE | |
| LOW | gallery/back_me_up.py | 12 | CODE | |
| LOW | gallery/data_entry.py | 6 | CODE | |
| LOW | gallery/calculator.py | 6 | CODE | |
| LOW | gallery/magic_mouse.py | 9 | CODE | |
| LOW | gallery/text_reader.py | 6 | CODE | |
| LOW | gallery/screenshot.py | 1 | CODE | |
| LOW | gallery/everything_bagel.py | 2 | CODE | |
| LOW | gallery/file_search_engine.py | 12 | CODE | |
| LOW | tests/test_utility_api.py | 45 | CODE | |
| LOW | tests/test_utility_api.py | 45 | CODE | |
| LOW | tests/test_utility_api.py | 45 | CODE | |
| LOW | tests/test_scrolled_api.py | 10 | CODE | |
| LOW | tests/test_toast_api.py | 13 | CODE | |
| LOW | tests/test_dialogs_api.py | 17 | CODE | |
| LOW | tests/test_dateentry_api.py | 15 | CODE | |
| LOW | tests/widget_styles/test_default_dialog_styles.py | 12 | CODE | |
| LOW | tests/widget_styles/test_icons.py | 21 | CODE | |
| LOW | tests/widgets/test_lifecycle.py | 16 | CODE | |
| LOW | tests/localization/test_locale_helpers.py | 14 | CODE | |
| LOW | docs/screenshots/separator.py | 4 | CODE | |
| LOW | docs/screenshots/app-structures.py | 4 | CODE | |
| LOW | docs/screenshots/panedwindow.py | 4 | CODE | |
| LOW | docs/screenshots/meter.py | 4 | CODE | |
| LOW | docs/screenshots/labelframe.py | 4 | CODE | |
| LOW | docs/screenshots/radiobutton.py | 4 | CODE | |
| LOW | docs/screenshots/build-your-first-app.py | 4 | CODE | |
| LOW | docs/screenshots/button.py | 4 | CODE | |
| LOW | docs/screenshots/frame.py | 4 | CODE | |
| LOW | docs/screenshots/dialogs.py | 5 | CODE | |
| LOW | docs/screenshots/notebook.py | 4 | CODE | |
| LOW | docs/screenshots/sizegrip.py | 4 | CODE | |
| LOW | docs/screenshots/scrollbar.py | 4 | CODE | |
| LOW | docs/scripts/take_screenshots.py | 33 | CODE | |
| LOW | docs/scripts/theme_gallery.py | 12 | CODE | |
| LOW | examples/file_dialog_default_routing.py | 17 | CODE | |
| LOW | examples/surface_preview.py | 14 | CODE | |
| LOW | examples/icon_button_preview.py | 12 | CODE | |
| LOW | examples/neutral_preview.py | 11 | CODE | |
| LOW | examples/prerelease_visual_review.py | 34 | CODE | |
| LOW | examples/prerelease_visual_review.py | 37 | CODE | |
| LOW | examples/prerelease_visual_review.py | 39 | CODE | |
| LOW | examples/value_token_preview.py | 19 | CODE | |
| LOW | examples/themed_file_dialog.py | 11 | CODE | |
| LOW | src/ttkcreator/__main__.py | 15 | CODE | |
| LOW | src/ttkbootstrap/window.py | 15 | CODE | |
| LOW | src/ttkbootstrap/window.py | 18 | CODE | |
| LOW | src/ttkbootstrap/utility.py | 18 | CODE | |
| LOW | src/ttkbootstrap/utility.py | 18 | CODE | |
| 241 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/generate_style_reference.py | 210 | except Exception: | CODE |
| LOW⚡ | tools/generate_style_reference.py | 223 | except Exception: | CODE |
| LOW⚡ | tools/generate_style_reference.py | 230 | except Exception: | CODE |
| LOW⚡ | tools/generate_style_reference.py | 236 | except Exception: | CODE |
| LOW | tools/verify_positioning.py | 138 | except Exception: | CODE |
| LOW | development/2_0_icon_drop_design.md | 79 | except Exception: | CODE |
| LOW⚡ | tests/test_tableview_api.py | 234 | except Exception: | CODE |
| LOW | tests/test_widget_stubs.py | 247 | except Exception: | CODE |
| LOW⚡ | tests/test_treeview_rowheight.py | 39 | except Exception: | CODE |
| LOW | tests/test_menu_api.py | 90 | except Exception: | CODE |
| LOW | tests/test_toast_api.py | 27 | except Exception: | CODE |
| LOW⚡ | tests/test_labeledscale_tooltip_api.py | 31 | except Exception: | CODE |
| LOW | tests/test_dialogs_api.py | 280 | except Exception: | CODE |
| LOW | tests/test_dialogs_api.py | 306 | except Exception: | CODE |
| LOW⚡ | tests/test_fonts_api.py | 32 | except Exception: | CODE |
| LOW⚡ | tests/test_fonts_api.py | 41 | except Exception: | CODE |
| LOW⚡ | tests/test_fonts_api.py | 118 | except Exception: | CODE |
| LOW⚡ | tests/test_fonts_api.py | 173 | except Exception: | CODE |
| LOW | docs/scripts/take_screenshots.py | 447 | except Exception: | CODE |
| LOW | docs/scripts/take_screenshots.py | 573 | except Exception as exc: | CODE |
| LOW | docs/scripts/take_screenshots.py | 585 | except Exception as exc: | CODE |
| LOW | examples/value_token_preview.py | 116 | except Exception: | CODE |
| LOW | src/ttkcreator/__main__.py | 244 | except Exception as e: | CODE |
| LOW | src/ttkcreator/__main__.py | 306 | except Exception: | CODE |
| LOW | src/ttkbootstrap/window.py | 721 | except Exception: | CODE |
| LOW | src/ttkbootstrap/__init__.py | 229 | except Exception: | CODE |
| LOW | src/ttkbootstrap/internal/positioning.py | 28 | except Exception: # pragma: no cover - screeninfo is an optional extra | CODE |
| LOW | src/ttkbootstrap/internal/positioning.py | 116 | except Exception: | CODE |
| LOW | src/ttkbootstrap/internal/positioning.py | 128 | except Exception: | CODE |
| LOW⚡ | src/ttkbootstrap/utils/scaling.py | 57 | except Exception: | CODE |
| LOW⚡ | src/ttkbootstrap/utils/scaling.py | 59 | except Exception: | CODE |
| LOW⚡ | src/ttkbootstrap/utils/scaling.py | 65 | except Exception: | CODE |
| LOW | src/ttkbootstrap/style/scaling.py | 62 | except Exception: | CODE |
| LOW | src/ttkbootstrap/style/bootstyle.py | 308 | except Exception: | CODE |
| LOW⚡ | src/ttkbootstrap/style/engine.py | 519 | except Exception as exc: | CODE |
| LOW | src/ttkbootstrap/style/builders/toggle.py | 108 | except Exception: | CODE |
| LOW | src/ttkbootstrap/style/builders/combobox.py | 98 | except Exception: | CODE |
| LOW | src/ttkbootstrap/dialogs/query.py | 412 | except Exception: | CODE |
| LOW | src/ttkbootstrap/dialogs/message.py | 192 | except Exception: | CODE |
| LOW | src/ttkbootstrap/dialogs/filedialog.py | 122 | except Exception: | CODE |
| LOW | src/ttkbootstrap/dialogs/filedialog.py | 651 | except Exception: | CODE |
| LOW | src/ttkbootstrap/dialogs/fontdialog.py | 314 | except Exception: | CODE |
| LOW | src/ttkbootstrap/dialogs/base.py | 84 | except Exception: | CODE |
| LOW | src/ttkbootstrap/dialogs/base.py | 113 | except Exception: | CODE |
| LOW | src/ttkbootstrap/widgets/toast.py | 369 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/ttkbootstrap/style/builders/panedwindow.py | 0 | create a standard style for the ttk.notebook widget. parameters: builder (stylebuilderttk): the style builder colorname | STRING |
| HIGH | src/ttkbootstrap/style/builders/label.py | 0 | create a standard style for the ttk.notebook widget. parameters: builder (stylebuilderttk): the style builder colorname | STRING |
| HIGH | src/ttkbootstrap/style/builders/checkbutton.py | 0 | create a standard style for the ttk.notebook widget. parameters: builder (stylebuilderttk): the style builder colorname | STRING |
| HIGH | src/ttkbootstrap/style/builders/notebook.py | 0 | create a standard style for the ttk.notebook widget. parameters: builder (stylebuilderttk): the style builder colorname | STRING |
| HIGH | src/ttkbootstrap/style/builders/treeview.py | 0 | create a style for the ttk.sizegrip widget. parameters: builder (stylebuilderttk): the style builder colorname (str): th | STRING |
| HIGH | src/ttkbootstrap/style/builders/labelframe.py | 0 | create a style for the ttk.sizegrip widget. parameters: builder (stylebuilderttk): the style builder colorname (str): th | STRING |
| HIGH | src/ttkbootstrap/style/builders/spinbox.py | 0 | create a style for the ttk.sizegrip widget. parameters: builder (stylebuilderttk): the style builder colorname (str): th | STRING |
| HIGH | src/ttkbootstrap/style/builders/radiobutton.py | 0 | create a style for the ttk.sizegrip widget. parameters: builder (stylebuilderttk): the style builder colorname (str): th | STRING |
| HIGH | src/ttkbootstrap/style/builders/frame.py | 0 | create a style for the ttk.sizegrip widget. parameters: builder (stylebuilderttk): the style builder colorname (str): th | STRING |
| HIGH | src/ttkbootstrap/style/builders/sizegrip.py | 0 | create a style for the ttk.sizegrip widget. parameters: builder (stylebuilderttk): the style builder colorname (str): th | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/ttkbootstrap/window.py | 279 | def _setup_icon(self, iconphoto: Optional[str], default_data: Optional[str] = None) -> None: | CODE |
| LOW | src/ttkbootstrap/window.py | 380 | def _setup_alpha(self, alpha: Optional[float]) -> None: | CODE |
| LOW | src/ttkbootstrap/window.py | 712 | def _set_app_user_model_id() -> None: | CODE |
| LOW⚡ | src/ttkbootstrap/constants.py | 573 | __all__ = [ | CODE |
| LOW | src/ttkbootstrap/__init__.py | 329 | __all__ = [ | CODE |
| LOW | src/ttkbootstrap/internal/configure_delegation.py | 205 | __all__ = ["configure_delegate", "ConfigureDelegationMixin"] | CODE |
| LOW | src/ttkbootstrap/utils/color.py | 9 | __all__ = [ | CODE |
| LOW | src/ttkbootstrap/utils/config.py | 55 | def set_default_button(color: str) -> None: | CODE |
| LOW | src/ttkbootstrap/utils/__init__.py | 67 | __all__ = [ | CODE |
| LOW | src/ttkbootstrap/utils/fonts.py | 79 | def set_global_family(cls, family: str, *, mono_family: Optional[str] = None) -> None: | CODE |
| LOW | src/ttkbootstrap/utils/fonts.py | 167 | def set_global_family(family: str, *, mono_family: Optional[str] = None) -> None: | CODE |
| LOW | src/ttkbootstrap/style/__init__.py | 39 | __all__ = [ | CODE |
| LOW | src/ttkbootstrap/style/engine.py | 397 | def set_theme_modes(self, light: str = None, dark: str = None) -> None: | CODE |
| LOW⚡ | src/ttkbootstrap/style/_compat.py | 21 | def set_bootstyle_strict(strict: bool = True) -> None: | CODE |
| LOW | src/ttkbootstrap/dialogs/colorchooser.py | 387 | def set_variables(self, h: int, s: int, l: int, r: int, g: int, b: int, hx: str) -> None: | CODE |
| LOW | src/ttkbootstrap/dialogs/colorchooser.py | 409 | def update_preview(self) -> None: | CODE |
| LOW | src/ttkbootstrap/dialogs/colorchooser.py | 419 | def update_luminance_scale(self) -> None: | CODE |
| LOW⚡ | src/ttkbootstrap/dialogs/colorchooser.py | 435 | def update_luminance_indicator(self) -> None: | CODE |
| LOW⚡ | src/ttkbootstrap/dialogs/colorchooser.py | 443 | def update_spectrum_indicator(self) -> None: | CODE |
| LOW | src/ttkbootstrap/dialogs/__init__.py | 15 | __all__ = [ | CODE |
| LOW | src/ttkbootstrap/dialogs/filedialog.py | 503 | def _set_filetype(self, globs: Tuple[str, ...], display: str) -> None: | CODE |
| LOW | src/ttkbootstrap/dialogs/filedialog.py | 514 | def _update_row_icons(self) -> None: | CODE |
| LOW | src/ttkbootstrap/dialogs/datepicker.py | 323 | def _setup_calendar(self) -> None: | CODE |
| LOW | src/ttkbootstrap/dialogs/datepicker.py | 464 | def _set_title(self) -> None: | CODE |
| LOW | src/ttkbootstrap/dialogs/datepicker.py | 537 | def _set_window_position(self, position: Optional[Tuple[int, int]] = None) -> None: | CODE |
| LOW | src/ttkbootstrap/dialogs/fontdialog.py | 296 | def _update_font_preview(self, *_: Any) -> None: | CODE |
| LOW | src/ttkbootstrap/widgets/meter.py | 318 | def _update_meter(self, *_: Any) -> None: | CODE |
| LOW | src/ttkbootstrap/widgets/meter.py | 340 | def _setup_widget(self) -> None: | CODE |
| LOW | src/ttkbootstrap/widgets/meter.py | 386 | def _set_widget_colors(self) -> None: | CODE |
| LOW⚡ | src/ttkbootstrap/widgets/meter.py | 398 | def _set_meter_text(self) -> None: | CODE |
| LOW⚡ | src/ttkbootstrap/widgets/meter.py | 403 | def _set_subtext(self) -> None: | CODE |
| LOW⚡ | src/ttkbootstrap/widgets/meter.py | 411 | def _set_show_text(self) -> None: | CODE |
| LOW⚡ | src/ttkbootstrap/widgets/meter.py | 430 | def _set_text_left(self) -> None: | CODE |
| LOW⚡ | src/ttkbootstrap/widgets/meter.py | 435 | def _set_text_center(self) -> None: | CODE |
| LOW⚡ | src/ttkbootstrap/widgets/meter.py | 440 | def _set_text_right(self) -> None: | CODE |
| LOW⚡ | src/ttkbootstrap/widgets/meter.py | 446 | def _set_interactive_bind(self) -> None: | CODE |
| LOW | src/ttkbootstrap/widgets/__init__.py | 66 | __all__ = [ | CODE |
| LOW | src/ttkbootstrap/widgets/dateentry.py | 376 | def set_date(self, new_date: Union[datetime, date, None]) -> None: | CODE |
| LOW | src/ttkbootstrap/widgets/floodgauge.py | 175 | def _update_theme_colors(self) -> None: | CODE |
| LOW | src/ttkbootstrap/widgets/floodgauge.py | 653 | def _set_widget_text(self, *_: Any) -> None: | CODE |
| LOW | src/ttkbootstrap/widgets/floodgauge.py | 663 | def _set_mask(self) -> None: | CODE |
| LOW | src/ttkbootstrap/widgets/toast.py | 333 | def _setup(self, window) -> None: | CODE |
| LOW | src/ttkbootstrap/localization/__init__.py | 6 | __all__ = [ | CODE |
| LOW | src/ttkbootstrap/localization/api.py | 40 | def set_locale(locale: str) -> None: | CODE |
| LOW | src/ttkbootstrap/localization/api.py | 115 | def set_source(self, src: str, *args: Any, **kwargs: Any) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/widget_styles/test_color_helpers.py | 180 | # theme-robust rather than pinned to one theme's background. | COMMENT |
| MEDIUM | docs/screenshots/combobox.py | 9 | # the harness parent grabs the region. | COMMENT |
| MEDIUM | docs/screenshots/theming.py | 7 | # A small representative window; the harness captures it once per theme | COMMENT |
| MEDIUM | docs/screenshots/tooltip.py | 10 | # drops within the window), and the harness parent grabs the region. | COMMENT |
| MEDIUM | docs/screenshots/dateentry.py | 12 | # the harness parent grabs the region while it's up. | COMMENT |
| MEDIUM | docs/screenshots/multiple-windows.py | 8 | # would block) -- the harness targets the dialog window directly. | COMMENT |
| MEDIUM | docs/screenshots/optionmenu.py | 16 | # to the harness parent, then post | COMMENT |
| MEDIUM | docs/screenshots/windows.py | 9 | # the child sits at screen center, far from the harness-offset parent -- so | COMMENT |
| MEDIUM | docs/screenshots/dialogs.py | 38 | # the harness parent grabs the region while it's up. | COMMENT |
| MEDIUM | docs/screenshots/menubutton.py | 22 | # to the harness parent, then post | COMMENT |
| MEDIUM | docs/scripts/take_screenshots.py | 110 | # window level while the harness holds it topmost, so order by our own | COMMENT |
| MEDIUM | docs/scripts/take_screenshots.py | 199 | # In parent-capture mode the harness parent takes the shot and | COMMENT |
| MEDIUM | docs/scripts/take_screenshots.py | 289 | # The harness prints this as the ``:width:`` to pin in the rST. | COMMENT |
| MEDIUM | docs/scripts/take_screenshots.py | 294 | # In parent-capture mode the harness parent takes the shot; don't | COMMENT |
| MEDIUM | docs/scripts/take_screenshots.py | 313 | # The harness parent process composites this process's windows — | COMMENT |
| MEDIUM | src/ttkbootstrap/window.py | 737 | """A class that wraps the tkinter.Toplevel class in order to | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/ttkbootstrap/utils/color.py | 29 | Convert color value to rgb. The color and model parameters represent the color to be converted. The value is ex | STRING |
| HIGH | src/ttkbootstrap/style/theme.py | 442 | Return the appropriate foreground color for the specified color_label. Parameters: color_la | STRING |
| HIGH | src/ttkbootstrap/style/bootstyle.py | 396 | Find and return widget orient, or default orient for widget if a widget with orientation. Parameters: | STRING |
| HIGH | src/ttkbootstrap/style/bootstyle.py | 463 | Parse a string to build and return a ttkstyle name. Parameters: widget (Widget): T | STRING |
| HIGH | src/ttkbootstrap/style/bootstyle.py | 701 | Update the ttk style or create if not existing. Parameters: widget (ttk.Widget): T | STRING |
| HIGH | src/ttkbootstrap/widgets/dateentry.py | 444 | Validate that a date format string is appropriate for dates. Checks that the format string contains sufficient | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | gallery/calculator.py | 75 | CODE | |
| LOW | gallery/file_search_engine.py | 248 | CODE | |
| LOW | gallery/file_search_engine.py | 259 | CODE | |
| LOW | gallery/file_search_engine.py | 270 | CODE | |
| LOW | tests/conftest.py | 74 | CODE | |
| LOW | tests/test_durable_style_options.py | 437 | CODE | |
| LOW | tests/test_scaling.py | 538 | CODE | |
| LOW | tests/test_scaling.py | 565 | CODE | |
| LOW | docs/scripts/take_screenshots.py | 451 | CODE | |
| LOW | docs/scripts/take_screenshots.py | 525 | CODE | |
| LOW | src/ttkbootstrap/internal/configure_delegation.py | 70 | CODE | |
| LOW | src/ttkbootstrap/style/bootstyle.py | 170 | CODE | |
| LOW | src/ttkbootstrap/style/bootstyle.py | 262 | CODE | |
| LOW | src/ttkbootstrap/style/bootstyle.py | 698 | CODE | |
| LOW | src/ttkbootstrap/style/engine.py | 851 | CODE | |
| LOW | src/ttkbootstrap/dialogs/colorchooser.py | 163 | CODE | |
| LOW | src/ttkbootstrap/dialogs/filedialog.py | 141 | CODE | |
| LOW | src/ttkbootstrap/dialogs/datepicker.py | 302 | CODE | |
| LOW | src/ttkbootstrap/dialogs/datepicker.py | 344 | CODE | |
| LOW | src/ttkbootstrap/widgets/tableview.py | 933 | CODE | |
| LOW | src/ttkbootstrap/widgets/tableview.py | 1216 | CODE | |
| LOW | src/ttkbootstrap/widgets/tableview.py | 1487 | CODE | |
| LOW | src/ttkbootstrap/widgets/tableview.py | 2303 | CODE | |
| LOW | src/ttkbootstrap/widgets/dateentry.py | 534 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | requirements.txt | 1 | # Development dependencies -- `pip install -r requirements.txt` alongside an | COMMENT |
| LOW | pyproject.toml | 61 | COMMENT | |
| LOW | CLAUDE.md | 121 | # Blessed tk widgets: Tk/Menu/Text/Canvas/Listbox/TkFrame/TkLabel. | COMMENT |
| LOW | tools/verify_positioning.py | 201 | # This is the demo's case (`python -m ttkbootstrap`) and the one check 6 misses: | COMMENT |
| LOW | tools/generate_widget_stubs.py | 141 | # reference is what documents the surface. (Tk's `bd`/`bg`/`fg` abbreviations | COMMENT |
| LOW | docs/conf.py | 21 | "sphinx.ext.intersphinx", | COMMENT |
| LOW | .github/workflows/publish.yml | 1 | name: Publish | COMMENT |
| LOW | .github/workflows/ci.yml | 81 | # screeninfo is deliberately NOT installed: it is optional at runtime, and | COMMENT |
| LOW | src/ttkbootstrap/window.py | 21 | from ttkbootstrap.style import Style, Bootstyle | COMMENT |
| LOW | src/ttkbootstrap/constants.py | 81 | COMMENT | |
| LOW | src/ttkbootstrap/constants.py | 101 | "outline", "link", "ghost", "round", "square", "striped", "thin", | COMMENT |
| LOW | src/ttkbootstrap/constants.py | 121 | # Every base-type/family the resolver recognizes, whether inferred from the | COMMENT |
| LOW | src/ttkbootstrap/constants.py | 161 | # --------------------------------------------------------------------------- | COMMENT |
| LOW | src/ttkbootstrap/style/theme.py | 861 | name: str | COMMENT |
| LOW | src/ttkbootstrap/style/bootstyle.py | 101 | # winfo_class inference matches the class name by substring; try longer family | COMMENT |
| LOW | src/ttkbootstrap/style/icons.py | 361 | "TCheckbutton", "TRadiobutton", | COMMENT |
| LOW | src/ttkbootstrap/style/engine.py | 121 | # toggle_theme(); None means "derive from the -light/-dark naming". | COMMENT |
| LOW | src/ttkbootstrap/style/engine.py | 301 | if not themename: | COMMENT |
| LOW | src/ttkbootstrap/widgets/scrolled.py | 101 | # scrollbar sit inside a single bordered box (the inner Text is kept | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/ttkbootstrap/window.py | 542 | CODE | |
| LOW | src/ttkbootstrap/window.py | 751 | CODE | |
| LOW | src/ttkbootstrap/dialogs/query.py | 23 | CODE | |
| LOW | src/ttkbootstrap/dialogs/message.py | 49 | CODE | |
| LOW | src/ttkbootstrap/dialogs/filedialog.py | 253 | CODE | |
| LOW | src/ttkbootstrap/widgets/meter.py | 119 | CODE | |
| LOW | src/ttkbootstrap/widgets/meter.py | 592 | CODE | |
| LOW | src/ttkbootstrap/widgets/meter.py | 642 | CODE | |
| LOW | src/ttkbootstrap/widgets/tableview.py | 428 | CODE | |
| LOW | src/ttkbootstrap/widgets/tableview.py | 2227 | CODE | |
| LOW | src/ttkbootstrap/widgets/tooltip.py | 53 | CODE | |
| LOW | src/ttkbootstrap/widgets/dateentry.py | 64 | CODE | |
| LOW | src/ttkbootstrap/widgets/floodgauge.py | 80 | CODE | |
| LOW | src/ttkbootstrap/widgets/floodgauge.py | 507 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/ttkbootstrap/__init__.py | 18 | # Create a themed application root | STRING |
| MEDIUM | src/ttkbootstrap/style/engine.py | 326 | # Creating the builder also runs theme_create + theme_use for the | COMMENT |
| MEDIUM | src/ttkbootstrap/style/engine.py | 349 | # Creating the builder also runs theme_create + theme_use for the | COMMENT |
| MEDIUM | src/ttkbootstrap/style/engine.py | 557 | # Create the Tcl-level theme | COMMENT |
| MEDIUM | src/ttkbootstrap/style/builders/toggle.py | 109 | """This method is used as the default Toggle style, so it is | STRING |
| MEDIUM | src/ttkbootstrap/widgets/tooltip.py | 199 | # Create the tooltip window at a temporary position | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/test_convert_theme.py | 278 | ("themes.json", '{"themes": null}'), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | development/2_0_prerelease_review_plan.md | 33 | ### Track A — agentic correctness + API sweep (automatable) | COMMENT |