Add widget→View reverse lookup and app widget hierarchy#91
Open
dccote wants to merge 1 commit into
Open
Conversation
Add Base.view_for(widget) to recover the mytk View that owns a tkinter widget. Each placement method (grid_into/pack_into/place_into) stamps the View onto its widget via a plain .mytk_view instance attribute. Add App.widget_hierarchy(widget=None) to dump the tkinter widget tree as a nested dict using only winfo_* introspection; defaults to the app root. Covered by mytk/tests/testWidgetHierarchy.py. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two small introspection helpers for mytk:
Base.view_for(widget)— given any tkinter widget, return the mytk View that owns it (orNone). Each placement method (grid_into/pack_into/place_into) now stamps the View onto its widget as a plain.mytk_viewinstance attribute right after the widget is created.App.widget_hierarchy(widget=None)— return the tkinter widget tree as a nested dict (class/name/path/children) using only tkinter's built-inwinfo_*methods. Defaults to the app root, so the common call is justapp.widget_hierarchy(); pass a widget to root at a subtree.widget_hierarchylives onApprather than_BaseWidgetbecause inspecting the whole app tree is an app-level concern, whereasview_foris genuinely widget-level.Usage
Tests
New
mytk/tests/testWidgetHierarchy.py(7 tests) coversview_forafter all three placement methods, the unknown-widgetNonecase, andwidget_hierarchyshape/default-root/custom-root behavior. Full suite: 511 passed, 8 skipped.🤖 Generated with Claude Code