[Python-checkins] r69406 - in python/branches/py3k: Lib/test/test_tcl.py Lib/tkinter/ttk.py

guilherme.polo python-checkins at python.org
Sat Feb 7 03:33:47 CET 2009


Author: guilherme.polo
Date: Sat Feb  7 03:33:47 2009
New Revision: 69406

Log:
Merged revisions 69404 via svnmerge from 
svn+ssh://pythondev/python/trunk

........
  r69404 | guilherme.polo | 2009-02-07 00:20:29 -0200 (Sat, 07 Feb 2009) | 2 lines
  
  Eliminated the need to use ttk.__loadtk__ and the problems related it.
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Lib/test/test_tcl.py
   python/branches/py3k/Lib/tkinter/ttk.py

Modified: python/branches/py3k/Lib/test/test_tcl.py
==============================================================================
--- python/branches/py3k/Lib/test/test_tcl.py	(original)
+++ python/branches/py3k/Lib/test/test_tcl.py	Sat Feb  7 03:33:47 2009
@@ -4,15 +4,9 @@
 import os
 import _tkinter
 from test import support
-from tkinter import Tk, Tcl
+from tkinter import Tcl
 from _tkinter import TclError
 
-# Restore Tkinter.Tk._loadtk that may have been overridden by ttk.
-# If this is not done then this test may fail for reasons related
-# to ttk only (like failing to load the tile package).
-from tkinter.ttk import __loadtk__
-Tk._loadtk = __loadtk__
-
 
 class TkinterTest(unittest.TestCase):
 

Modified: python/branches/py3k/Lib/tkinter/ttk.py
==============================================================================
--- python/branches/py3k/Lib/tkinter/ttk.py	(original)
+++ python/branches/py3k/Lib/tkinter/ttk.py	Sat Feb  7 03:33:47 2009
@@ -29,32 +29,40 @@
 
 _flatten = tkinter._flatten
 
-# Verify if Tk is new enough to not need Tile checking
+# Verify if Tk is new enough to not need the Tile package
 _REQUIRE_TILE = True if tkinter.TkVersion < 8.5 else False
 
-def _loadttk(loadtk):
-    # This extends the default tkinter.Tk._loadtk method so we can be
-    # sure that ttk is available for use, or not.
-    def _wrapper(self):
-        loadtk(self)
-
-        if _REQUIRE_TILE:
-            import os
-            tilelib = os.environ.get('TILE_LIBRARY')
-            if tilelib:
-                # append custom tile path to the the list of directories that
-                # Tcl uses when attempting to resolve packages with the package
-                # command
-                self.tk.eval('global auto_path; '
-                             'lappend auto_path {%s}' % tilelib)
-            self.tk.eval('package require tile') # TclError may be raised here
-
-    return _wrapper
-
-# Store the original tkinter.Tk._loadtk before replacing it just in case
-# someone wants to restore it.
-__loadtk__ = tkinter.Tk._loadtk
-tkinter.Tk._loadtk = _loadttk(tkinter.Tk._loadtk)
+def _load_tile(master):
+    if _REQUIRE_TILE:
+        import os
+        tilelib = os.environ.get('TILE_LIBRARY')
+        if tilelib:
+            # append custom tile path to the the list of directories that
+            # Tcl uses when attempting to resolve packages with the package
+            # command
+            master.tk.eval(
+                    'global auto_path; '
+                    'lappend auto_path {%s}' % tilelib)
+
+        master.tk.eval('package require tile') # TclError may be raised here
+        master._tile_loaded = True
+
+
+def _setup_master(master=None):
+    """If master is not None, itself is returned. If master is None,
+    the default master is returned if there is one, otherwise a new
+    master is created and returned.
+
+    If it is not allowed to use the default root and master is None,
+    RuntimeError is raised."""
+    if master is None:
+        if tkinter._support_default_root:
+            master = tkinter._default_root or tkinter.Tk()
+        else:
+            raise RuntimeError(
+                    "No master specified and tkinter is "
+                    "configured to not support default root")
+    return master
 
 
 def _format_optdict(optdict, script=False, ignore=None):
@@ -366,12 +374,11 @@
     _name = "ttk::style"
 
     def __init__(self, master=None):
-        if master is None:
-            if tkinter._support_default_root:
-                master = tkinter._default_root or tkinter.Tk()
-            else:
-                raise RuntimeError("No master specified and tkinter is "
-                    "configured to not support default master")
+        master = _setup_master(master)
+
+        if not getattr(master, '_tile_loaded', False):
+            # Load tile now, if needed
+            _load_tile(master)
 
         self.master = master
         self.tk = self.master.tk
@@ -548,6 +555,10 @@
             active, disabled, focus, pressed, selected, background,
             readonly, alternate, invalid
         """
+        master = _setup_master(master)
+        if not getattr(master, '_tile_loaded', False):
+            # Load tile now, if needed
+            _load_tile(master)
         tkinter.Widget.__init__(self, master, widgetname, kw=kw)
 
 


More information about the Python-checkins mailing list