]> granicus.if.org Git - python/commitdiff
Patch #763580: Add name and value arguments to
authorMartin v. Löwis <martin@v.loewis.de>
Sat, 17 Jun 2006 09:15:14 +0000 (09:15 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Sat, 17 Jun 2006 09:15:14 +0000 (09:15 +0000)
Tkinter variable classes.

Lib/lib-tk/Tkinter.py
Misc/NEWS

index b3d58a2cae2dc16f5c898860d7a98692c490d90e..7cbcb500bb4861960228c1b3e3c5deef5e9c0fff 100644 (file)
@@ -168,18 +168,30 @@ class Variable:
     Subclasses StringVar, IntVar, DoubleVar, BooleanVar are specializations
     that constrain the type of the value returned from get()."""
     _default = ""
-    def __init__(self, master=None):
-        """Construct a variable with an optional MASTER as master widget.
-        The variable is named PY_VAR_number in Tcl.
+    def __init__(self, master=None, value=None, name=None):
+        """Construct a variable
+        
+        MASTER can be given as master widget.
+        VALUE is an optional value (defaults to "")
+        NAME is an optional Tcl name (defaults to PY_VARnum).
+         
+        If NAME matches an existing variable and VALUE is omitted
+        then the existing value is retained.
         """
         global _varnum
         if not master:
             master = _default_root
         self._master = master
         self._tk = master.tk
-        self._name = 'PY_VAR' + repr(_varnum)
-        _varnum = _varnum + 1
-        self.set(self._default)
+        if name:
+            self._name = name
+        else:
+            self._name = 'PY_VAR' + `_varnum`
+            _varnum += 1
+        if value != None:
+            self.set(value)
+        elif not self._tk.call("info", "exists", self._name):
+            self.set(self._default)
     def __del__(self):
         """Unset the variable in Tcl."""
         self._tk.globalunsetvar(self._name)
@@ -217,15 +229,29 @@ class Variable:
         """Return all trace callback information."""
         return map(self._tk.split, self._tk.splitlist(
             self._tk.call("trace", "vinfo", self._name)))
+    def __eq__(self, other):
+        """Comparison for equality (==).
+        
+        Note: if the Variable's master matters to behavior
+        also compare self._master == other._master
+        """
+        return self.__class__.__name__ == other.__class__.__name__ \
+            and self._name == other._name
 
 class StringVar(Variable):
     """Value holder for strings variables."""
     _default = ""
-    def __init__(self, master=None):
+    def __init__(self, master=None, value=None, name=None):
         """Construct a string variable.
 
-        MASTER can be given as master widget."""
-        Variable.__init__(self, master)
+        MASTER can be given as master widget.
+        VALUE is an optional value (defaults to "")
+        NAME is an optional Tcl name (defaults to PY_VARnum).
+        
+        If NAME matches an existing variable and VALUE is omitted
+        then the existing value is retained.
+        """
+        Variable.__init__(self, master, value, name)
 
     def get(self):
         """Return value of variable as string."""
@@ -237,11 +263,17 @@ class StringVar(Variable):
 class IntVar(Variable):
     """Value holder for integer variables."""
     _default = 0
-    def __init__(self, master=None):
+    def __init__(self, master=None, value=None, name=None):
         """Construct an integer variable.
 
-        MASTER can be given as master widget."""
-        Variable.__init__(self, master)
+        MASTER can be given as master widget.
+        VALUE is an optional value (defaults to 0)
+        NAME is an optional Tcl name (defaults to PY_VARnum).
+        
+        If NAME matches an existing variable and VALUE is omitted
+        then the existing value is retained.
+        """
+        Variable.__init__(self, master, value, name)
 
     def set(self, value):
         """Set the variable to value, converting booleans to integers."""
@@ -256,11 +288,17 @@ class IntVar(Variable):
 class DoubleVar(Variable):
     """Value holder for float variables."""
     _default = 0.0
-    def __init__(self, master=None):
+    def __init__(self, master=None, value=None, name=None):
         """Construct a float variable.
 
-        MASTER can be given as a master widget."""
-        Variable.__init__(self, master)
+        MASTER can be given as master widget.
+        VALUE is an optional value (defaults to 0.0)
+        NAME is an optional Tcl name (defaults to PY_VARnum).
+        
+        If NAME matches an existing variable and VALUE is omitted
+        then the existing value is retained.
+        """
+        Variable.__init__(self, master, value, name)
 
     def get(self):
         """Return the value of the variable as a float."""
@@ -268,12 +306,18 @@ class DoubleVar(Variable):
 
 class BooleanVar(Variable):
     """Value holder for boolean variables."""
-    _default = "false"
-    def __init__(self, master=None):
+    _default = False
+    def __init__(self, master=None, value=None, name=None):
         """Construct a boolean variable.
 
-        MASTER can be given as a master widget."""
-        Variable.__init__(self, master)
+        MASTER can be given as master widget.
+        VALUE is an optional value (defaults to False)
+        NAME is an optional Tcl name (defaults to PY_VARnum).
+        
+        If NAME matches an existing variable and VALUE is omitted
+        then the existing value is retained.
+        """
+        Variable.__init__(self, master, value, name)
 
     def get(self):
         """Return the value of the variable as a bool."""
index f4af2e30552e7f1d5d335dfde9061960c09f53b0..1a658c53c1611997550891e186c814ffb9edcc8a 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -163,6 +163,9 @@ Extension Modules
 Library
 -------
 
+- Patch #763580: Add name and value arguments to Tkinter variable
+  classes.
+
 - Bug #1117556: SimpleHTTPServer now tries to find and use the system's
   mime.types file for determining MIME types.