summaryrefslogtreecommitdiff
path: root/Lib/lib-tk/FixTk.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1999-01-04 18:06:45 +0000
committerGuido van Rossum <guido@python.org>1999-01-04 18:06:45 +0000
commit197fd60084e31ef52e10c32665c5ee22646207e4 (patch)
tree677e2cceee2ce9eeb333d19f0d8f76e3122ccde3 /Lib/lib-tk/FixTk.py
parent0f9e789a8f33092a7281b8d9690b5e075dcca76d (diff)
downloadcpython-197fd60084e31ef52e10c32665c5ee22646207e4.tar.gz
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.
Diffstat (limited to 'Lib/lib-tk/FixTk.py')
-rw-r--r--Lib/lib-tk/FixTk.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/Lib/lib-tk/FixTk.py b/Lib/lib-tk/FixTk.py
new file mode 100644
index 0000000000..6c7de03efa
--- /dev/null
+++ b/Lib/lib-tk/FixTk.py
@@ -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))