Skip to content

Commit 9751e1d

Browse files
gh-152587: Make name and value required in tkinter variable methods (GH-152595)
The name parameter of Misc.wait_variable(), setvar() and getvar() and the value parameter of setvar() no longer have default values, which were not meaningful ('PY_VAR' and '1'). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent b8cb055 commit 9751e1d

4 files changed

Lines changed: 22 additions & 3 deletions

File tree

Doc/whatsnew/3.16.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,14 @@ Porting to Python 3.16
559559
This section lists previously described changes and other bugfixes
560560
that may require changes to your code.
561561

562+
* In :mod:`tkinter`, the *name* parameter of the
563+
:meth:`~tkinter.Misc.wait_variable`, :meth:`~tkinter.Misc.setvar` and
564+
:meth:`~tkinter.Misc.getvar` methods and the *value* parameter of
565+
:meth:`!setvar` are now required. Calling these methods without
566+
them, which formerly defaulted to ``'PY_VAR'`` and ``'1'``, now raises
567+
:exc:`TypeError`.
568+
(Contributed by Serhiy Storchaka in :gh:`152587`.)
569+
562570

563571
Build changes
564572
=============

Lib/test/test_tkinter/test_misc.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,10 @@ def test_getdouble(self):
367367
def test_getvar(self):
368368
self.root.setvar('test_var', 'hello')
369369
self.assertEqual(self.root.getvar('test_var'), 'hello')
370+
# The name and value are required (gh-152587).
371+
self.assertRaises(TypeError, self.root.getvar)
372+
self.assertRaises(TypeError, self.root.setvar)
373+
self.assertRaises(TypeError, self.root.setvar, 'test_var')
370374

371375
def test_register(self):
372376
result = []
@@ -598,6 +602,8 @@ def test_wait_variable(self):
598602
self.root.after(1, var.set, 'done')
599603
self.root.wait_variable(var) # Returns once the variable is set.
600604
self.assertEqual(var.get(), 'done')
605+
# The name is required (gh-152587).
606+
self.assertRaises(TypeError, self.root.wait_variable)
601607

602608
def test_wait_window(self):
603609
top = tkinter.Toplevel(self.root)

Lib/tkinter/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -818,7 +818,7 @@ def tk_inactive(self, reset=False, *, displayof=0):
818818
else:
819819
return self.tk.getint(self.tk.call(args))
820820

821-
def wait_variable(self, name='PY_VAR'):
821+
def wait_variable(self, name):
822822
"""Wait until the variable is modified.
823823
824824
A parameter of type IntVar, StringVar, DoubleVar or
@@ -843,11 +843,11 @@ def wait_visibility(self, window=None):
843843
window = self
844844
self.tk.call('tkwait', 'visibility', window._w)
845845

846-
def setvar(self, name='PY_VAR', value='1'):
846+
def setvar(self, name, value):
847847
"""Set Tcl variable NAME to VALUE."""
848848
self.tk.setvar(name, value)
849849

850-
def getvar(self, name='PY_VAR'):
850+
def getvar(self, name):
851851
"""Return value of Tcl variable NAME."""
852852
return self.tk.getvar(name)
853853

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
In :mod:`tkinter`, the *name* parameter of the
2+
:meth:`~tkinter.Misc.wait_variable`, :meth:`~tkinter.Misc.setvar` and
3+
:meth:`~tkinter.Misc.getvar` methods and the *value* parameter of
4+
:meth:`!setvar` are now required. Their former default values
5+
(``'PY_VAR'`` and ``'1'``) were not meaningful.

0 commit comments

Comments
 (0)