summaryrefslogtreecommitdiffstats
path: root/Lib/lib-tk/FixTk.py
blob: 6c7de03efa2e3924d2836e72d11d3335f9c20776 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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))