mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
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:
parent
88303194a5
commit
f8d579c5e3
2 changed files with 68 additions and 1 deletions
64
Lib/lib-tk/FixTk.py
Normal file
64
Lib/lib-tk/FixTk.py
Normal 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))
|
Loading…
Add table
Add a link
Reference in a new issue