diff --git a/PC/VC6/build_tkinter.py b/PC/VC6/build_tkinter.py
new file mode 100644
index 0000000..f2e3c41
--- /dev/null
+++ b/PC/VC6/build_tkinter.py
@@ -0,0 +1,81 @@
+import os
+import sys
+import subprocess
+
+TCL_MAJOR = 8
+TCL_MINOR = 5
+TCL_PATCH = 2
+
+TIX_MAJOR = 8
+TIX_MINOR = 4
+TIX_PATCH = 3
+
+def abspath(name):
+    par = os.path.pardir
+    return os.path.abspath(os.path.join(__file__, par, par, par, par, name))
+
+TCL_DIR = abspath("tcl%d.%d.%d" % (TCL_MAJOR, TCL_MINOR, TCL_PATCH))
+TK_DIR  = abspath("tk%d.%d.%d"  % (TCL_MAJOR, TCL_MINOR, TCL_PATCH))
+TIX_DIR = abspath("tix%d.%d.%d" % (TIX_MAJOR, TIX_MINOR, TIX_PATCH))
+OUT_DIR = abspath("tcltk")
+
+def have_args(*a):
+    return any(s in sys.argv[1:] for s in a)
+
+def enter(dir):
+    os.chdir(os.path.join(dir, "win"))
+
+def main():
+    debug = have_args("-d", "--debug")
+    clean = have_args("clean")
+    install = have_args("install")
+    tcl = have_args("tcl")
+    tk = have_args("tk")
+    tix = have_args("tix")
+    if not(tcl) and not(tk) and not(tix):
+        tcl = tk = tix = True
+
+    def nmake(makefile, *a):
+        args = ["nmake", "/nologo", "/f", makefile, "DEBUG=%d" % debug]
+        args.extend(a)
+        subprocess.check_call(args)
+
+    if tcl:
+        enter(TCL_DIR)
+        def nmake_tcl(*a):
+            nmake("makefile.vc", *a)
+        if clean:
+            nmake_tcl("clean")
+        elif install:
+            nmake_tcl("install", "INSTALLDIR=" + OUT_DIR)
+        else:
+            nmake_tcl()
+
+    if tk:
+        enter(TK_DIR)
+        def nmake_tk(*a):
+            nmake("makefile.vc", "TCLDIR=" + TCL_DIR, *a)
+        if clean:
+            nmake_tk("clean")
+        elif install:
+            nmake_tk("install", "INSTALLDIR=" + OUT_DIR)
+        else:
+            nmake_tk()
+
+    if tix:
+        enter(TIX_DIR)
+        def nmake_tix(*a):
+            nmake("python.mak",
+                  "TCL_MAJOR=%d" % TCL_MAJOR,
+                  "TCL_MINOR=%d" % TCL_MINOR,
+                  "TCL_PATCH=%d" % TCL_PATCH,
+                  "MACHINE=IX86", *a)
+        if clean:
+            nmake_tix("clean")
+        elif install:
+            nmake_tix("install", "INSTALL_DIR=" + OUT_DIR)
+        else:
+            nmake_tix()
+
+if __name__ == '__main__':
+    main()
