[3.15] gh-123193: Document tkinter Variable lifetime (GH-152625) (GH-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 820b6ca22d)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Miss Islington (bot)
2026-07-05 13:15:56 +02:00
committed by GitHub
parent 67d782c6bc
commit a862fbc7f0
+11
View File
@@ -656,6 +656,9 @@ method on it, and to change its value you call the :meth:`!set` method.
If you follow this protocol, the widget will always track the value of the
variable, with no further intervention on your part.
Keep a reference to the variable for as long as a widget uses it, for example
by storing it as an attribute (see :class:`Variable`).
For example::
import tkinter as tk
@@ -5736,6 +5739,14 @@ Variable classes
:class:`StringVar`, :class:`IntVar`, :class:`DoubleVar` or
:class:`BooleanVar` -- rather than :class:`!Variable` directly.
.. note::
When a :class:`!Variable` is garbage collected, its Tcl variable is unset.
Keep a reference to it for as long as a widget is linked to it, for example
by storing it as an attribute rather than in a local variable.
Otherwise Tk recreates the Tcl variable to keep the widget working, but it
is never unset again, leaking one Tcl variable per dropped wrapper.
.. versionchanged:: 3.10
Two variables now compare equal (``==``) only when they have the same
name, are of the same class, and belong to the same Tcl interpreter.