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.
........
This commit is contained in:
Guilherme Polo 2009-02-07 02:33:47 +00:00
parent b2071f8684
commit fa8fba96a6
2 changed files with 39 additions and 34 deletions

View File

@ -4,15 +4,9 @@ import unittest
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):

View File

@ -29,32 +29,40 @@ import tkinter
_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)
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)
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
master.tk.eval('package require tile') # TclError may be raised here
master._tile_loaded = True
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 _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 @@ class Style(object):
_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 @@ class Widget(tkinter.Widget):
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)