Commit d97c01ff authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #20067: Tkinter variables now work when wantobjects is false.

parent e80e806b
...@@ -220,12 +220,12 @@ class Variable: ...@@ -220,12 +220,12 @@ class Variable:
_varnum += 1 _varnum += 1
if value is not None: if value is not None:
self.initialize(value) self.initialize(value)
elif not self._tk.call("info", "exists", self._name): elif not self._tk.getboolean(self._tk.call("info", "exists", self._name)):
self.initialize(self._default) self.initialize(self._default)
def __del__(self): def __del__(self):
"""Unset the variable in Tcl.""" """Unset the variable in Tcl."""
if (self._tk is not None and self._tk.call("info", "exists", if (self._tk is not None and
self._name)): self._tk.getboolean(self._tk.call("info", "exists", self._name))):
self._tk.globalunsetvar(self._name) self._tk.globalunsetvar(self._name)
def __str__(self): def __str__(self):
"""Return the name of the variable in Tcl.""" """Return the name of the variable in Tcl."""
......
...@@ -24,6 +24,9 @@ class TestBase(unittest.TestCase): ...@@ -24,6 +24,9 @@ class TestBase(unittest.TestCase):
class TestVariable(TestBase): class TestVariable(TestBase):
def info_exists(self, *args):
return self.root.getboolean(self.root.call("info", "exists", *args))
def test_default(self): def test_default(self):
v = Variable(self.root) v = Variable(self.root)
self.assertEqual("", v.get()) self.assertEqual("", v.get())
...@@ -35,21 +38,21 @@ class TestVariable(TestBase): ...@@ -35,21 +38,21 @@ class TestVariable(TestBase):
self.assertEqual("varname", str(v)) self.assertEqual("varname", str(v))
def test___del__(self): def test___del__(self):
self.assertFalse(self.root.call("info", "exists", "varname")) self.assertFalse(self.info_exists("varname"))
v = Variable(self.root, "sample string", "varname") v = Variable(self.root, "sample string", "varname")
self.assertTrue(self.root.call("info", "exists", "varname")) self.assertTrue(self.info_exists("varname"))
del v del v
self.assertFalse(self.root.call("info", "exists", "varname")) self.assertFalse(self.info_exists("varname"))
def test_dont_unset_not_existing(self): def test_dont_unset_not_existing(self):
self.assertFalse(self.root.call("info", "exists", "varname")) self.assertFalse(self.info_exists("varname"))
v1 = Variable(self.root, name="name") v1 = Variable(self.root, name="name")
v2 = Variable(self.root, name="name") v2 = Variable(self.root, name="name")
del v1 del v1
self.assertFalse(self.root.call("info", "exists", "name")) self.assertFalse(self.info_exists("name"))
# shouldn't raise exception # shouldn't raise exception
del v2 del v2
self.assertFalse(self.root.call("info", "exists", "name")) self.assertFalse(self.info_exists("name"))
def test___eq__(self): def test___eq__(self):
# values doesn't matter, only class and name are checked # values doesn't matter, only class and name are checked
......
...@@ -29,6 +29,8 @@ Core and Builtins ...@@ -29,6 +29,8 @@ Core and Builtins
Library Library
------- -------
- Issue #20067: Tkinter variables now work when wantobjects is false.
- Issue #19020: Tkinter now uses splitlist() instead of split() in configure - Issue #19020: Tkinter now uses splitlist() instead of split() in configure
methods. methods.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment