Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d97c01f

Browse files
Issue #20067: Tkinter variables now work when wantobjects is false.
1 parent e80e806 commit d97c01f

3 files changed

Lines changed: 14 additions & 9 deletions

File tree

Lib/tkinter/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,12 +220,12 @@ def __init__(self, master=None, value=None, name=None):
220220
_varnum += 1
221221
if value is not None:
222222
self.initialize(value)
223-
elif not self._tk.call("info", "exists", self._name):
223+
elif not self._tk.getboolean(self._tk.call("info", "exists", self._name)):
224224
self.initialize(self._default)
225225
def __del__(self):
226226
"""Unset the variable in Tcl."""
227-
if (self._tk is not None and self._tk.call("info", "exists",
228-
self._name)):
227+
if (self._tk is not None and
228+
self._tk.getboolean(self._tk.call("info", "exists", self._name))):
229229
self._tk.globalunsetvar(self._name)
230230
def __str__(self):
231231
"""Return the name of the variable in Tcl."""

Lib/tkinter/test/test_tkinter/test_variables.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ def tearDown(self):
2424

2525
class TestVariable(TestBase):
2626

27+
def info_exists(self, *args):
28+
return self.root.getboolean(self.root.call("info", "exists", *args))
29+
2730
def test_default(self):
2831
v = Variable(self.root)
2932
self.assertEqual("", v.get())
@@ -35,21 +38,21 @@ def test_name_and_value(self):
3538
self.assertEqual("varname", str(v))
3639

3740
def test___del__(self):
38-
self.assertFalse(self.root.call("info", "exists", "varname"))
41+
self.assertFalse(self.info_exists("varname"))
3942
v = Variable(self.root, "sample string", "varname")
40-
self.assertTrue(self.root.call("info", "exists", "varname"))
43+
self.assertTrue(self.info_exists("varname"))
4144
del v
42-
self.assertFalse(self.root.call("info", "exists", "varname"))
45+
self.assertFalse(self.info_exists("varname"))
4346

4447
def test_dont_unset_not_existing(self):
45-
self.assertFalse(self.root.call("info", "exists", "varname"))
48+
self.assertFalse(self.info_exists("varname"))
4649
v1 = Variable(self.root, name="name")
4750
v2 = Variable(self.root, name="name")
4851
del v1
49-
self.assertFalse(self.root.call("info", "exists", "name"))
52+
self.assertFalse(self.info_exists("name"))
5053
# shouldn't raise exception
5154
del v2
52-
self.assertFalse(self.root.call("info", "exists", "name"))
55+
self.assertFalse(self.info_exists("name"))
5356

5457
def test___eq__(self):
5558
# values doesn't matter, only class and name are checked

Misc/NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ Core and Builtins
2929
Library
3030
-------
3131

32+
- Issue #20067: Tkinter variables now work when wantobjects is false.
33+
3234
- Issue #19020: Tkinter now uses splitlist() instead of split() in configure
3335
methods.
3436

0 commit comments

Comments
 (0)