"""Utility which tries to locate the Tcl/Tk 8.0 DLLs on Windows. This is a no-op on other platforms. Modified to use win32 extensions and registry to get the official tcl dir 3/00 hacked to use windows registry. contact: dirck@danbala.com """ # 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": import os # dirck's hack: # locate tcl based on registry def tclreg(): try: import win32api import win32con s = win32api.RegQueryValue(win32con.HKEY_LOCAL_MACHINE, r"SOFTWARE\SCRIPTICS\TCL\8.0") s = s + r"\bin" return s except: return None # do this BEFORE our initial import to avoid an unnecessary error message try: path = os.environ['PATH'] except KeyError: path = "" if path and path[-1] != os.pathsep: path = path + os.pathsep path = path + tclreg() os.environ["PATH"] = path os.putenv("PATH", path) try: import _tkinter except ImportError: 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))