$Id$

Installing Tix.py
----------------

0) To use Tix.py, you need Tcl/Tk (V8.3.3), Tix (V8.1.1) and Python (V2.1.1).
   Tix.py has been written and tested on a Intel Pentium running RH Linux 5.2
   and Mandrake Linux 7.0 and Windows with the above mentioned packages.

   Older versions, e.g. Tix 4.1 and Tk 8.0, might also work.

   There is nothing OS-specific in Tix.py itself so it should work on
   any machine with Tix and Python installed. You can get Tcl and Tk
   from http://dev.scriptics.com and Tix from http://tix.sourceforge.net.

1) Build and install Tcl/Tk 8.3. Build and install Tix 8.1.
   Ensure that Tix is properly installed by running tixwish and executing
   the demo programs. Under Unix, use the --enable-shared configure option
   for all three. We recommend tcl8.3.3 for this release of Tix.py.

2a) If you have a distribution like ActiveState with a tcl subdirectory
   of $PYTHONHOME, which contains the directories tcl8.3 and tk8.3,
   make a directory tix8.1 as well. Recursively copy the files from
   <tix>/library to $PYTHONHOME/lib/tix8.1, and copy the dynamic library
   (tix8183.dll or libtix8.1.8.3.so) to the same place as the tcl dynamic
   libraries  ($PYTHONHOME/Dlls or lib/python-2.1/lib-dynload). In this
   case you are all installed, and you can skip to the end.

2b) Modify Modules/Setup.dist and setup.py to change the version of the 
   tix library from tix4.1.8.0 to tix8.1.8.3
   These modified files can be used for Tkinter with or without Tix.
   
3) The default is to build dynamically, and use the Tcl 'package require'.
   To build statically, modify the Modules/Setup file to link in the Tix 
   library according to the comments in the file. On Linux this looks like:

# *** Always uncomment this (leave the leading underscore in!):
_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT \
# *** Uncomment and edit to reflect where your Tcl/Tk libraries are:
	-L/usr/local/lib \
# *** Uncomment and edit to reflect where your Tcl/Tk headers are:
	-I/usr/local/include \
# *** Uncomment and edit to reflect where your X11 header files are:
	-I/usr/X11R6/include \
# *** Or uncomment this for Solaris:
#	-I/usr/openwin/include \
# *** Uncomment and edit for BLT extension only:
#	-DWITH_BLT -I/usr/local/blt/blt8.0-unoff/include -lBLT8.0 \
# *** Uncomment and edit for PIL (TkImaging) extension only:
#     (See http://www.pythonware.com/products/pil/ for more info)
#	-DWITH_PIL -I../Extensions/Imaging/libImaging  tkImaging.c \
# *** Uncomment and edit for TOGL extension only:
#	-DWITH_TOGL togl.c \
# *** Uncomment and edit for Tix extension only:
	-DWITH_TIX -ltix8.1.8.3 \
# *** Uncomment and edit to reflect your Tcl/Tk versions:
	-ltk8.3 -ltcl8.3 \
# *** Uncomment and edit to reflect where your X11 libraries are:
	-L/usr/X11R6/lib \
# *** Or uncomment this for Solaris:
#	-L/usr/openwin/lib \
# *** Uncomment these for TOGL extension only:
#	-lGL -lGLU -lXext -lXmu \
# *** Uncomment for AIX:
#	-lld \
# *** Always uncomment this; X11 libraries to link with:
	-lX11

4) Rebuild Python and reinstall.

You should now have a working Tix implementation in Python. To see if all
is as it should be, run the 'tixwidgets.py' script in the Demo/tix directory.
Under X windows, do
	/usr/local/bin/python Demo/tix/tixwidgets.py

If this does not work, you may need to tell python where to find
the Tcl, Tk and Tix library files. This is done by setting the
TCL_LIBRARY, TK_LIBRARY and TIX_LIBRARY environment variables. Try this:

	env 	TCL_LIBRARY=/usr/local/lib/tcl8.3 \
		TK_LIBRARY=/usr/local/lib/tk8.3 \
		TIX_LIBRARY=/usr/local/lib/tix8.1 \
		/usr/local/bin/python Demo/tix/tixwidgets.py


If you find any bugs or have suggestions for improvement, please report them
via http://tix.sourceforge.net


