$Id$

Installing PyTix
----------------

0) To use PyTix, you need Tcl/Tk (V8.2+), Tix (V8.1+) and Python (V2.1+).
   PyTix 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 PyTix 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.2 or 8.3. Build and install Tix 8.1 or better.
   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.2.3 for this release of PyTix.

2) Modify Modules/Setup.dist and setup.py to change the version of the 
   tix library from tix4.1.8.0 to tix8.1.8.2
   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.2 \
# *** Uncomment and edit to reflect your Tcl/Tk versions:
	-ltk8.2 -ltcl8.2 \
# *** 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.2 \
		TK_LIBRARY=/usr/local/lib/tk8.2 \
		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


