Some more changes from the net...  Typos, 4.0/4.1 issues, new tkButtonInvoke().
diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
index d31ca9f..8234077 100644
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -24,10 +24,23 @@
 from Tkconstants import *
 import string; _string = string; del string
 
-TkVersion = eval(tkinter.TK_VERSION)
-TclVersion = eval(tkinter.TCL_VERSION)
+TkVersion = _string.atof(tkinter.TK_VERSION)
+TclVersion = _string.atof(tkinter.TCL_VERSION)
 
-
+######################################################################
+# Since the values of file event masks changed from Tk 4.0 to Tk 4.1,
+# they are defined here (and not in Tkconstants):
+######################################################################
+if TkVersion >= 4.1:
+    READABLE = 2
+    WRITABLE = 4
+    EXCEPTION = 8
+else:
+    READABLE = 1
+    WRITABLE = 2
+    EXCEPTION = 4
+    
+    
 def _flatten(tuple):
 	res = ()
 	for item in tuple:
@@ -249,7 +262,7 @@
 	def winfo_class(self):
 		return self.tk.call('winfo', 'class', self._w)
 	def winfo_containing(self, rootX, rootY):
-		return self.tk.call('winfo', 'containing', rootx, rootY)
+		return self.tk.call('winfo', 'containing', rootX, rootY)
 	def winfo_depth(self):
 		return self.tk.getint(self.tk.call('winfo', 'depth', self._w))
 	def winfo_exists(self):
@@ -451,7 +464,12 @@
 		except TclError: pass
 		e.height = tk.getint(h)
 		e.keycode = tk.getint(k)
-		e.state = tk.getint(s)
+		# For Visibility events, event state is a string and
+		# not an integer:
+		try:
+			e.state = tk.getint(s)
+		except TclError:
+			e.state = s
 		e.time = tk.getint(t)
 		e.width = tk.getint(w)
 		e.x = tk.getint(x)
@@ -865,6 +883,8 @@
 		self.tk.call('tkButtonDown', self._w)
 	def tkButtonUp(self, *dummy):
 		self.tk.call('tkButtonUp', self._w)
+	def tkButtonInvoke(self, *dummy):
+		self.tk.call('tkButtonInvoke', self._w)
 	def flash(self):
 		self.tk.call(self._w, 'flash')
 	def invoke(self):
diff --git a/Lib/tkinter/Tkinter.py b/Lib/tkinter/Tkinter.py
index d31ca9f..8234077 100755
--- a/Lib/tkinter/Tkinter.py
+++ b/Lib/tkinter/Tkinter.py
@@ -24,10 +24,23 @@
 from Tkconstants import *
 import string; _string = string; del string
 
-TkVersion = eval(tkinter.TK_VERSION)
-TclVersion = eval(tkinter.TCL_VERSION)
+TkVersion = _string.atof(tkinter.TK_VERSION)
+TclVersion = _string.atof(tkinter.TCL_VERSION)
 
-
+######################################################################
+# Since the values of file event masks changed from Tk 4.0 to Tk 4.1,
+# they are defined here (and not in Tkconstants):
+######################################################################
+if TkVersion >= 4.1:
+    READABLE = 2
+    WRITABLE = 4
+    EXCEPTION = 8
+else:
+    READABLE = 1
+    WRITABLE = 2
+    EXCEPTION = 4
+    
+    
 def _flatten(tuple):
 	res = ()
 	for item in tuple:
@@ -249,7 +262,7 @@
 	def winfo_class(self):
 		return self.tk.call('winfo', 'class', self._w)
 	def winfo_containing(self, rootX, rootY):
-		return self.tk.call('winfo', 'containing', rootx, rootY)
+		return self.tk.call('winfo', 'containing', rootX, rootY)
 	def winfo_depth(self):
 		return self.tk.getint(self.tk.call('winfo', 'depth', self._w))
 	def winfo_exists(self):
@@ -451,7 +464,12 @@
 		except TclError: pass
 		e.height = tk.getint(h)
 		e.keycode = tk.getint(k)
-		e.state = tk.getint(s)
+		# For Visibility events, event state is a string and
+		# not an integer:
+		try:
+			e.state = tk.getint(s)
+		except TclError:
+			e.state = s
 		e.time = tk.getint(t)
 		e.width = tk.getint(w)
 		e.x = tk.getint(x)
@@ -865,6 +883,8 @@
 		self.tk.call('tkButtonDown', self._w)
 	def tkButtonUp(self, *dummy):
 		self.tk.call('tkButtonUp', self._w)
+	def tkButtonInvoke(self, *dummy):
+		self.tk.call('tkButtonInvoke', self._w)
 	def flash(self):
 		self.tk.call(self._w, 'flash')
 	def invoke(self):