Skip to content

gh-123193: Document tkinter Variable lifetime#152625

Open
serhiy-storchaka wants to merge 1 commit into
python:mainfrom
serhiy-storchaka:gh-123193-variable-lifetime-docs
Open

gh-123193: Document tkinter Variable lifetime#152625
serhiy-storchaka wants to merge 1 commit into
python:mainfrom
serhiy-storchaka:gh-123193-variable-lifetime-docs

Conversation

@serhiy-storchaka

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>
@bedevere-app bedevere-app Bot added docs Documentation in the Doc dir skip news labels Jun 29, 2026
@github-project-automation github-project-automation Bot moved this to Todo in Docs PRs Jun 29, 2026
@serhiy-storchaka serhiy-storchaka added needs backport to 3.13 bugs and security fixes needs backport to 3.14 bugs and security fixes needs backport to 3.15 pre-release feature fixes, bugs and security fixes labels Jun 29, 2026
@read-the-docs-community

Copy link
Copy Markdown

Documentation build overview

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

  🔍 Preview build  

1 file changed
± library/tkinter.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting core review docs Documentation in the Doc dir needs backport to 3.13 bugs and security fixes needs backport to 3.14 bugs and security fixes needs backport to 3.15 pre-release feature fixes, bugs and security fixes skip news

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

1 participant