This hopefully fixes the problem of having to set PATH

in autoexec.bat in order to find the Tcl DLLs -- Tkinter calls FixTk
which will hunt around in a few common places and then set PATH
and try again, or else issue a big clarifying error message.
This commit is contained in:
Guido van Rossum 1999-01-04 18:06:45 +00:00
parent 88303194a5
commit f8d579c5e3
2 changed files with 68 additions and 1 deletions

64
Lib/lib-tk/FixTk.py Normal file
View File

@ -0,0 +1,64 @@
"""Utility which tries to locate the Tcl/Tk 8.0 DLLs on Windows.
This is a no-op on other platforms.
"""
# Error messages we may spit out
NO_TCL_MESSAGE = """\
WHOOPS! I can't find a Tcl/Tk 8.0 installation anywhere.
Please make sure that Tcl.Tk 8.0 is installed and that the PATH
environment variable is set to include the Tcl/bin directory
(or wherever TK80.DLL and TCL80.DLL are installed).
If you don't know how to fix this, consider searching the Python FAQ
for the error you get; post to the comp.lang.python if all else fails.
Read the source file FixTk.py for details.
"""
NO_TKINTER_MESSAGE = """\
WHOOPS! Even though I think I have found a Tcl/Tk 8.0 installation,
I can't seem to import the _tkinter extension module.
I get the following exception:
ImportError: %s
If you don't know how to fix this, consider searching the Python FAQ
for the error you get; post to the comp.lang.python if all else fails.
Read the source file FixTk.py for details.
"""
import sys
if sys.platform == "win32":
try:
import _tkinter
except ImportError:
import os
try:
path = os.environ['PATH']
except KeyError:
path = ""
python_exe = sys.executable
python_dir = os.path.dirname(python_exe)
program_files = os.path.dirname(python_dir)
def tclcheck(dir):
for dll in "tcl80.dll", "tk80.dll", "tclpip80.dll":
if not os.path.isfile(os.path.join(dir, dll)):
return 0
return 1
for tcldir in [program_files, "\\Program files", "\\",
"C:\\Program Files", "D:\\Program Files"]:
tcldir = os.path.join(tcldir, "Tcl", "bin")
if tclcheck(tcldir):
break
else:
tcldir = None
if not tcldir:
sys.stderr.write(NO_TCL_MESSAGE)
else:
if path and path[-1] != os.pathsep:
path = path + os.pathsep
path = path + tcldir
os.environ["PATH"] = path
os.putenv("PATH", path)
try:
import _tkinter
except ImportError, message:
sys.stderr.write(NO_TKINTER_MESSAGE % str(message))

View File

@ -2,7 +2,10 @@
__version__ = "$Revision$"
import _tkinter # If this fails your Python is not configured for Tk
import sys
if sys.platform == "win32":
import FixTk # Attempt to configure Tcl/Tk without requiring PATH
import _tkinter # If this fails your Python may not be configured for Tk
tkinter = _tkinter # b/w compat for export
TclError = _tkinter.TclError
from types import *