Tcl/Tk quick start
Presented by developerWorks, your source for great tutorials
ibm.com/developerWorks
Table of Contents
If you're viewing this document online, you can click any of the topics below to link directly to that section.
1. About this tutorial....................................................... 2
2. Tcl/Tk basics ............................................................ 3
3. The Tcl language....................................................... 4
4. Tk commands........................................................... 16
5. Getting to know Expect................................................ 21
6. Tcl/Tk extensions....................................................... 25
7. Resources and feedback ............................................. 28
Tcl/Tk quick start Page 1 of 29
Section 1. About this tutorial
Who should take this tutorial?
This tutorial is designed for those with experience
in one or more programming or scripting
languages. While Tcl/Tk is available on several
platforms, including Win32 and MacOS as well as
several of the *NIX environments, this tutorial is
written in the context of running on a GNU/Linux
installation.
Starting out, I'll introduce Tcl/Tk and summarize a
small part of the language's history. Then, I'll
review key features of the Tcl/Tk scripting
language and interpreter, discuss some of the
extensions to the language, and examine several
examples of Tcl/Tk in action. The text is
accompanied by code fragments and occasionally
an image of the resulting output (since Tk is a GUI
toolkit, after all).
Finally, I'll wrap up with a presentation of some
external resources, both Web and print, to help you
deeper into the Tcl/Tk environment.
About the author
Brian Bilbrey is a system administrator, product
engineer, webmaster, and author. Linux is a tool in
his daily work as well as his avocation, much to the
chagrin of his long-suffering spouse, Marcia.
He welcomes your feedback on this tutorial or
other related Linux topics at
bilbrey@orbdesigns.com. His daily journal on life
with Linux and other adventures can be found at
OrbDesigns.com.
Presented by developerWorks, your source for great tutorials
ibm.com/developerWorks
Tcl/Tk quick start Page 2 of 29
Section 2. Tcl/Tk basics
Origins of Tcl/Tk
Tcl stands for Tool Command Language. Tk is the
Graphical Toolkit extension of Tcl, providing a
variety of standard GUI interface items to facilitate
rapid, high-level application development.
Development on Tcl/Tk, pronounced "tickle
tee-kay", began in 1988 by John K. Ousterhout
(shown in the image), then a Professor at U.C.
Berkeley (UCB). Tcl was designed with the specific
goals of extensibility, a shallow learning curve, and
ease of embedding. Tk development began in
1989, and the first version was available in 1991.
Dr. Ousterhout continued development of Tcl/Tk
after he left UCB, then going to work for Sun
Microsystems for a stint. Now at Tcl Developer
Xchange (which begat Ajuba Solutions, which was
purchased by Interwoven), he keeps on improving
the language, currently in version 8.3.2 stable and
8.4 development, as of this writing.
See the "History of Tcl" page for more details.
Tools and files
There are two main programs that you need on your Linux system to explore Tcl/Tk. These
are tclsh and wish. As you might discern from its name, the former is a Tcl shell, most
frequently used to provide execution context for a shell script. Wish is the equivalent, for a
windowed GUI environment.
Check for the presence of these files by typing the following:
~/tcltk$ which tclsh
/usr/bin/tclsh
~/tcltk$ which wish
/usr/bin/wish
The which command returns the path to the specified executable. If you don't see results
similar to these, then you'll want to head over to the Tcl/Tk page to download and build your
own copy. Of course, the absence of these programs on your system is not indicative of any
problem. Unlike Perl, Tcl/Tk is generally not regarded as essential to the operation of Linux.
Every distribution I'm aware of ships with a version of Tcl/Tk and the most popular extensions
as a part of the CDROM or online repository collection. From these sources, the tools are
generally fairly easy to install. If you have difficulty, contact the publisher of your GNU/Linux
software.
Presented by developerWorks, your source for great tutorials
ibm.com/developerWorks
Tcl/Tk quick start Page 3 of 29
Section 3. The Tcl language
What makes Tcl tick?
In the following listing, you'll find a common first
example program, as implemented in Tcl. This is a
complete script: the first line invokes the tclsh
environment, and the second does the actual work.
Create the script with a text editor of your
choosing, make it executable by typing chmod +x
hello.tcl, then execute it to test your
handiwork.
~/tcltk$ cat hello.tcl
#!/usr/bin/tclsh
puts stdout {Hello, World!}
~/tcltk$ ./hello.tcl
Hello, World!
Tcl and Tk are interpreted, extensible scripting
languages. The license, which is very similar to the
BSD license, permits free use under any
circumstances, as long as the copyright is retained
in all copies and notices pass verbatim in any
distribution. The license terms make Tcl/Tk free
software.
Tcl/Tk is an interpreted environment. The Tcl
interpreter can be extended by adding
pre-compiled C functions, which can be called from
within the Tcl environment. These extensions can
be custom for a specific purpose, or generic and
widely useful. We'll look at a number of extensions
later in the tutorial, with special attention given to
the first extension, the very popular Expect.
In next few panels, we'll review the major features
of the Tcl language, from metacharacters and
global variables, to operators, mathematical
functions, and core commands. After all, the
Presented by developerWorks, your source for great tutorials
ibm.com/developerWorks
Tcl/Tk quick start Page 4 of 29
commands make Tcl/Tk the distinctive evolving
language it is. Bear in mind that we do not have
the space in this tutorial to cover every command.
The highlights are here, the depths are yours to
explore at a later date.
Tcl metacharacters
Metacharacters are those characters or character pairs that have special meaning in the
context of the Tcl/Tk environment, including grouping statements, encapsulating strings,
terminating statements and more, as delineated in the following table. Many of these are
demonstrated in the code listing below. One special feature to notice is the difference in
output when curly braces (which prevent substitution and expansion) are used in place of
double quotes.
#!/usr/bin/tclsh
# filename hello2.tcl
# This program code shows
# metacharacter usage
puts stdout "Hello, World! \a"
puts stdout {Hello, World! \a}
set Pints 6
set Days 7
puts stdout "The answer to the \
universe is \
[eval expr $Pints * $Days]!\n"
***
~/tcltk$ ./hello2.tcl
Hello, World!
Hello, World! \a
The answer to everything is 42!
Character(s) Used as
# Comment
; or newline Statement separators
Name A variable (case sensitive)
Name(idx) Array Variable
Name(j,k,l...) Multidimensional Array
"string" Quoting with substitution
{string} Quoting without substitution
[string] Command substitution
\char Backslash substitution
\ Line continuation (at end of line)
Tcl global variables and backslash substitutions
Several global variables exist (and are pre-defined, if not null in the current context) when a
Tcl/Tk script begins running. These variables permit access to the operating environment as
follows: argc is the count of arguments to the script, not counting the name as invoked. argv
is a list (not an array) of arguments. argv0 is the invoked filename (which may be a symlink).
Presented by developerWorks, your source for great tutorials
ibm.com/developerWorks
Tcl/Tk quick start Page 5 of 29