René's URL Explorer Experiment


Title: gh-153716: Harden ttk/tkinter GUI tests against display scaling by serhiy-storchaka · Pull Request #153717 · python/cpython · GitHub

Open Graph Title: gh-153716: Harden ttk/tkinter GUI tests against display scaling by serhiy-storchaka · Pull Request #153717 · python/cpython

X Title: gh-153716: Harden ttk/tkinter GUI tests against display scaling by serhiy-storchaka · Pull Request #153717 · python/cpython

Description: Several test_ttk and test_tkinter GUI tests probed widget elements at fixed pixel coordinates (typically (5, 5)) or scanned a fixed pixel range (range(5, 100, 5), range(0, 100, 10)). ttk element geometry — tab padding, the focus ring, trough insets, row height — scales with the display DPI (tk scaling), so a fixed pixel that lands on the intended element at a normal scaling lands on a different element, or misses it entirely, at a high DPI. The test then either fails outright or passes by accident, its assertion accepting '' (the "nothing here" result) so it never actually exercises the behaviour it claims to. This surfaces on Retina/HiDPI macOS (Homebrew Tk 9, scaling 2.0) and on any X11 display with a high -dpi. The probe coordinates are now computed from each widget's own realized geometry instead of being hardcoded: NotebookTest._tab_point() — a new helper returning a point that really lies on a given tab, via the ttk::notebook index @x,y subcommand. Used by test_traversal (which now also asserts the selection before and after the click) and test_tab_identifiers. EntryTest.test_identify — probes the widget centre (winfo_width()/winfo_height()). TreeviewTest.test_tag_bind — scans the real winfo_height() for item rows. ScaleTest.test_identify — probes the trough centreline from Scale.coords(). This makes the tests position-, theme-, platform- and scaling-agnostic and removes the darwin coordinate special-cases. Test-only change. Verified across scaling 1–6 (DPI 72–432) on Tk 8.6.17 and 9.0.3. 🤖 Generated with Claude Code Issue: gh-153716

Open Graph Description: Several test_ttk and test_tkinter GUI tests probed widget elements at fixed pixel coordinates (typically (5, 5)) or scanned a fixed pixel range (range(5, 100, 5), range(0, 100, 10)). ttk element ge...

X Description: Several test_ttk and test_tkinter GUI tests probed widget elements at fixed pixel coordinates (typically (5, 5)) or scanned a fixed pixel range (range(5, 100, 5), range(0, 100, 10)). ttk element ge...

Opengraph URL: https://github.com/python/cpython/pull/153717

X: @github

direct link

Domain: github.com

react-profiling0
react-import-mapreact,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf
route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:ba5a87eb-1f2b-857c-076b-a81ff387994b
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idBDF0:1A67FD:41BC1D:5A5FD9:6AECCA7E
html-safe-nonce0c0ac7960431fbf8b761eb33a86c58521fcaf32460f652b664f37d6e8f6f2479
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCREYwOjFBNjdGRDo0MUJDMUQ6NUE1RkQ5OjZBRUNDQTdFIiwidmlzaXRvcl9pZCI6IjQ2MTAzMDYzNTIxNzE3NjQzNTAiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmac5acc343793fa65ac60c24d60590de7d1c5b46a2af67432c184b0f87bca76fc9e
hovercard-subject-tagpull_request:4055243336
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/python/cpython/pull/153717/files
twitter:imagehttps://avatars.githubusercontent.com/u/3659035?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/3659035?s=400&v=4
og:image:altSeveral test_ttk and test_tkinter GUI tests probed widget elements at fixed pixel coordinates (typically (5, 5)) or scanned a fixed pixel range (range(5, 100, 5), range(0, 100, 10)). ttk element ge...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Nonedc0b519c5798dc1150b88dc4c06a8b9634d0069218dc04e469970e76aad74016
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/python/cpython git https://github.com/python/cpython.git
octolytics-dimension-user_id1525981
octolytics-dimension-user_loginpython
octolytics-dimension-repository_id81598961
octolytics-dimension-repository_nwopython/cpython
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id81598961
octolytics-dimension-repository_network_root_nwopython/cpython
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
releasedb139f0bf57b59bf9a8c4abb0849924d6c6ca559
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/python/cpython/pull/153717/files#start-of-content
https://github.com/
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython%2Fcpython%2Fpull%2F153717%2Ffiles
GitHubRepository hosting, code review, and collaborationhttps://github.com/platform
CopilotAI coding agent for tasks, projects, and automated workhttps://github.com/features/copilot
ActionsCI/CD and automationhttps://github.com/features/actions
Code QualityQuality analysis, fixes, and enforcementhttps://github.com/features/code-quality
CodespacesCloud development environmentshttps://github.com/features/codespaces
Code SecurityVulnerability detection and remediationhttps://github.com/security/advanced-security/code-security
Secret ProtectionSecret scanning and leak preventionhttps://github.com/security/advanced-security/secret-protection
All Featureshttps://github.com/features
Documentationhttps://docs.github.com/en
Traininghttps://learn.github.com/skills
Certificationshttps://learn.github.com/credentials
Build with Copilothttps://github.com/features/ai
Customize Copilothttps://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview
Integrationshttps://github.com/marketplace
Trending reposhttps://github.com/trending
GitHub Sponsorshttps://github.com/open-source/sponsors
Developer articleshttps://github.com/resources/articles
ChangelogYour source for the latest features, improvements, and fixes across GitHub products, all in one place.https://github.blog/changelog/
Enterpriseshttps://github.com/enterprise
Teamhttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
See all industrieshttps://github.com/solutions/industry
Why GitHubhttps://github.com/why-github
Customer Storieshttps://github.com/customer-stories
Business insightshttps://github.com/solutions/executive-insights
Trust Centerhttps://github.com/trust-center
GitHub Advanced SecurityEnterprise-grade code securityhttps://github.com/security/advanced-security
Copilot for businessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Documentationhttps://docs.github.com/en
Resource centerhttps://github.com/resources
Bloghttps://github.blog/
Events & webinarshttps://github.com/resources/events
Community Forumhttps://github.com/orgs/community/discussions
Customer Storieshttps://github.com/customer-stories
Integrationshttps://github.com/marketplace
Customer supporthttps://help.github.com/
Traininghttps://learn.github.com/skills
GitHub Statushttps://www.githubstatus.com/
Abouthttps://github.com/about
Partnershttps://github.com/partners
Changeloghttps://github.blog/changelog/
GitHub UniverseThe event for developers, by developers — talks, workshops, and what’s next for GitHub.https://githubuniverse.com/
Pricinghttps://github.com/pricing
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython%2Fcpython%2Fpull%2F153717%2Ffiles
Sign uphttps://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=python%2Fcpython
Reloadhttps://github.com/python/cpython/pull/153717/files
Reloadhttps://github.com/python/cpython/pull/153717/files
Reloadhttps://github.com/python/cpython/pull/153717/files
pythonhttps://github.com/python
cpythonhttps://github.com/python/cpython
Codehttps://github.com/python/cpython
Issues5k+ (5k+)https://github.com/python/cpython/issues
Pull requests2.3k (2.3k)https://github.com/python/cpython/pulls
Actionshttps://github.com/python/cpython/actions
Projectshttps://github.com/python/cpython/projects
Security and qualityhttps://github.com/python/cpython/security
Insightshttps://github.com/python/cpython/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fpython%2Fcpython%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fpython%2Fcpython%2Fissues%2Fnew%2Fchoose
serhiy-storchakahttps://github.com/serhiy-storchaka
python:mainhttps://github.com/python/cpython/tree/main
serhiy-storchaka:gh-153716-harden-gui-tests-dpihttps://github.com/serhiy-storchaka/cpython/tree/gh-153716-harden-gui-tests-dpi
Conversation 5 https://github.com/python/cpython/pull/153717
Commits 2 https://github.com/python/cpython/pull/153717/commits
Checks 60 https://github.com/python/cpython/pull/153717/checks
Files changed https://github.com/python/cpython/pull/153717/files
Please reload this pagehttps://github.com/python/cpython/pull/153717/files
gh-153716: Harden ttk/tkinter GUI tests against display scaling https://github.com/python/cpython/pull/153717/files#top
Show all changes 2 commits https://github.com/python/cpython/pull/153717/files
0f3b424 gh-153716: Harden ttk/tkinter GUI tests against display scaling serhiy-storchaka Jul 14, 2026 https://github.com/python/cpython/pull/153717/commits/0f3b424e9145119a06c5772f805a98a2290e7e56
e653387 gh-153716: Scan for the ttk Spinbox and Combobox arrow, not a fixed p… serhiy-storchaka Jul 14, 2026 https://github.com/python/cpython/pull/153717/commits/e65338738309ab4b0d5d8c3491160124bf80e3e7
Clear filters https://github.com/python/cpython/pull/153717/files
Please reload this pagehttps://github.com/python/cpython/pull/153717/files
Please reload this pagehttps://github.com/python/cpython/pull/153717/files
test_widgets.py https://github.com/python/cpython/pull/153717/files#diff-b586d85a21dddb1f64322ce306bd51b35b0aa230e88de54987d50e27fd559bc0
test_widgets.py https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
Lib/test/test_tkinter/test_widgets.pyhttps://github.com/python/cpython/pull/153717/files#diff-b586d85a21dddb1f64322ce306bd51b35b0aa230e88de54987d50e27fd559bc0
View file https://github.com/serhiy-storchaka/cpython/blob/e65338738309ab4b0d5d8c3491160124bf80e3e7/Lib/test/test_tkinter/test_widgets.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python/cpython/pull/153717/{{ revealButtonHref }}
https://github.com/python/cpython/pull/153717/files#diff-b586d85a21dddb1f64322ce306bd51b35b0aa230e88de54987d50e27fd559bc0
https://github.com/python/cpython/pull/153717/files#diff-b586d85a21dddb1f64322ce306bd51b35b0aa230e88de54987d50e27fd559bc0
Lib/test/test_ttk/test_widgets.pyhttps://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
View file https://github.com/serhiy-storchaka/cpython/blob/e65338738309ab4b0d5d8c3491160124bf80e3e7/Lib/test/test_ttk/test_widgets.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python/cpython/pull/153717/{{ revealButtonHref }}
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
https://github.com/python/cpython/pull/153717/files#diff-f6a457ab81906f14719d086f9fec225d1810824da6b0b406d35dcb47262495a9
Please reload this pagehttps://github.com/python/cpython/pull/153717/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.