FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

gh-123193: Document tkinter Variable lifetime by serhiy-storchaka · Pull Request #152625 · python/cpython · GitHub

Repository navigation

gh-123193: Document tkinter Variable lifetime - #152625

Merged
serhiy-storchaka merged 1 commit into
python:mainfrom
serhiy-storchaka:gh-123193-variable-lifetime-docs
Jul 5, 2026
Merged

serhiy-storchaka merged 1 commit into
python:mainfrom
serhiy-storchaka:gh-123193-variable-lifetime-docs

Conversation

Copy link
Copy Markdown
Member

A Tk variable wrapper (StringVar, IntVar, ...) unsets its Tcl variable when the Python object is garbage collected.
If the wrapper is dropped while a widget still references it (through variable/textvariable), Tk recreates the Tcl variable to keep the widget working, but it is then no longer managed by Python and is never unset again — so it leaks.

This is the cause of gh-123193: dynamically creating widgets whose Variable objects are kept only in local variables (and thus collected while the widgets live on) steadily accumulates orphaned PY_VAR* Tcl globals.
It is the documented "keep a reference to your Variable" footgun rather than a fixable _tkinter bug, so this just documents the lifetime contract — on the coupling-widget-variables tutorial and on the Variable class.

A Tk variable wrapper unsets its Tcl variable when garbage collected, so a
reference must be kept while a widget uses it.  Otherwise Tk recreates the Tcl
variable but never unsets it again, leaking it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Copy link
Copy Markdown

Documentation build overview

📚 cpython-previews | 🛠️ Build #33361209 | 📁 Comparing 2b9878a against main (089e6f6)

  🔍 Preview build  

1 file changed
± library/tkinter.html

serhiy-storchaka merged commit 820b6ca into python:main Jul 5, 2026
42 checks passed
github-project-automation Bot moved this from Todo to Done in Docs PRs Jul 5, 2026

Copy link
Copy Markdown

Thanks @serhiy-storchaka for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13, 3.14, 3.15.
🐍🍒⛏🤖

serhiy-storchaka deleted the gh-123193-variable-lifetime-docs branch July 5, 2026 11:07

bedevere-app Bot commented Jul 5, 2026

Copy link
Copy Markdown

GH-153098 is a backport of this pull request to the 3.15 branch.

bedevere-app Bot removed the needs backport to 3.15 bugs and security fixes label Jul 5, 2026

bedevere-app Bot commented Jul 5, 2026

Copy link
Copy Markdown

GH-153099 is a backport of this pull request to the 3.14 branch.

bedevere-app Bot removed the needs backport to 3.14 bugs and security fixes label Jul 5, 2026

bedevere-app Bot commented Jul 5, 2026

Copy link
Copy Markdown

GH-153100 is a backport of this pull request to the 3.13 branch.

bedevere-app Bot removed the needs backport to 3.13 only security fixes label Jul 5, 2026
serhiy-storchaka added a commit that referenced this pull request Jul 5, 2026
…153100)

A Tk variable wrapper unsets its Tcl variable when garbage collected, so a
reference must be kept while a widget uses it.  Otherwise Tk recreates the Tcl
variable but never unsets it again, leaking it.
(cherry picked from commit 820b6ca)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
serhiy-storchaka added a commit that referenced this pull request Jul 5, 2026
…153099)

A Tk variable wrapper unsets its Tcl variable when garbage collected, so a
reference must be kept while a widget uses it.  Otherwise Tk recreates the Tcl
variable but never unsets it again, leaking it.
(cherry picked from commit 820b6ca)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
serhiy-storchaka added a commit that referenced this pull request Jul 5, 2026
…153098)

A Tk variable wrapper unsets its Tcl variable when garbage collected, so a
reference must be kept while a widget uses it.  Otherwise Tk recreates the Tcl
variable but never unsets it again, leaking it.
(cherry picked from commit 820b6ca)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Co-authored-by: Claude Opus 4.8 <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

Labels

docs Documentation in the Doc dir skip news

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant


Back | FazBrowse Home | New Git URL