COVID-19 Update: We are currently shipping orders daily. However, due to transit disruptions in some geographies, deliveries may be delayed. To provide all customers with timely access to content, we are offering 50% off Science and Technology Print & eBook bundle options. Terms & conditions.
Tcl/Tk - 2nd Edition - ISBN: 9781558608023, 9780080518435


2nd Edition

A Developer's Guide

Author: Clif Flynt
Paperback ISBN: 9781558608023
eBook ISBN: 9780080518435
Imprint: Morgan Kaufmann
Published Date: 5th May 2003
Page Count: 758
Sales tax will be calculated at check-out Price includes VAT/GST
Price includes VAT/GST

Institutional Subscription

Secure Checkout

Personal information is secured with SSL technology.

Free Shipping

Free global shipping
No minimum order.

Table of Contents

Tcl/Tk Features. 1.1 Tcl Overview. 1.1.1 The Standard Tcl Distribution 1.2 Tcl as a Glue Language 1.2.2 Tcl Scripts Compared with Unix Shell Scripts 1.2.3 Tcl Scripts Compared with MS-DOS .bat Files 1.3 Tcl as a General-Purpose Interpreter 1.3.1 Tcl/Tk Compared with Visual Basic 1.3.2 Tcl/Tk Compared with Perl 1.3.3 Tcl/Tk Compared with Python 1.3.4 Tcl/Tk Compared with Java 1.4 Tcl as an Extensible Interpreter 1.5 Tcl as an Embeddable Interpreter 1.6 Tcl as a Rapid Development Tool 1.7 GUI-Based Programming 1.8 Shipping Products 1.9 Bottom Line 1.10 Problems

The Mechanics of Using the Tcl and Tk Interpreters. 2.1 The tclsh and wish Interpreters 2.1.1 Starting the tclsh and wish Interpreters 2.1.2 Starting tclsh or wish under Unix 2.1.3 Starting tclsh or wish under Microsoft Windows 2.1.4 Starting tclsh or wish on the Mac 2.1.5 Exiting tclsh or wish 2.2 Using tclsh/wish Interactively 2.2.1 Tclsh as a Command Shell 2.2.2 Tk Console (tkcon) -- An Alternative Interactive tclsh/wish Shell 2.2.3 Evaluating Scripts Interactively 2.3 Evaluating Tcl Script Files 2.3.1 The Tcl Script File 2.3.2 Evaluating Tcl Script Files 2.3.3 Evaluating a Tcl Script File under Unix 2.3.4 Evaluating a Tcl Script File under Microsoft Windows 2.3.5 Evaluating a Tcl Script on the Mac 2.4 Bottom Line 2.5 Problems

Introduction to the Tcl Language. 3.1 Overview of the Basics 3.1.1 Syntax 3.1.2 Grouping Words 3.1.3 Comments 3.1.4 Data Representation 3.1.5 Command Results 3.1.6 Errors 3.2 Command Evaluation and Substitutions 3.2.1 Substitution 3.2.2 Controlling Substitutions with Quotes, Curly Braces, and Backslash 3.2.3 Steps in Command Evaluation 3.3 Data Types 3.3.1 Assigning Values to Variables 3.3.2 Strings 3.3.3 String Processing Commands 3.3.4 Lists 3.3.5 List Processing Commands 3.3.6 Associative Arrays 3.3.7 Associative Array Commands 3.3.8 Binary Data 3.3.9 Handles 3.4 Arithmetic and Boolean operations 3.4.1 Math Operations 3.4.2 Conditionals 3.4.3 Looping 3.5 Modularization 3.5.1 Procedures 3.6 Bottom Line 3.7 Problems

File System, Disk I/O and Sockets. 4.0.1 Navigating the File System 4.0.2 Properties of file system items 4.0.3 Removing files 4.1.2 Input 4.1.3 Creating a channel 4.1.4 Closing Channels 4.1 Input/Output in Tcl 4.1.1 Output 4.2 Sockets 4.2.1 Using a client socket 4.2.2 Controlling Data Flow 4.2.3 Server Sockets 4.3 Bottom Line 4.4 Problems

Using Strings and Lists. 5.1 Converting a String into a List 5.2 Examining the List with a for Loop 5.3 Using the foreach Command 5.4 Using the string match instead of string first 5.5 Using lsearch 5.6 The regexp Command 5.6.1 Regular Expression Matching Rules 5.6.2 Advanced and Extended Regular Expression Rules 5.7 Creating a Procedure 5.8 Making a Script 5.9 Speed Considerations 5.10 Bottom Line 5.11 Problems

Building complex data structures with lists and arrays. 6.1 Using the Tcl List 6.2 Using the Associative Array 6.3 Exception handling and Introspection 6.4 Trees in Tcl 6.5 Tree Library Implementation 6.5.5 Generating unique names 6.6 Using the Tree Library 6.7 Speed Considerations 6.8 Bottom Line 6.9 Problems

Procedure Techniques. 7.1 Arguments to Procedures 7.1.1 Variable Number of Arguments to a Procedure 7.1.2 Default Values for Procedure Arguments 7.2 Renaming or Deleting Commands 7.3 Getting Information about Procedures 7.4 Substitution and Evaluation of Strings 7.4.1 Performing Variable Substitution on a String 7.4.2 Evaluating a String as a Tcl Command 7.5 Working with Global and Local Scopes 7.5.1 Global and Local Scope 7.6.1 An Object Example 7.6.2 Creating a Tree Object 7.6.3 Defining the Object's Method 7.6 Making a Tcl Object 7.7 Bottom Line 7.8 Problems

Namespaces and Pack. 8.1 Namespaces and Scoping Rules 8.1.1 Namespace Scope 8.1.2 Namespace Naming Rules 8.1.3 Accessing Namespace Entities 8.1.4 Why Use Namespaces? 8.1.5 The namespace and variable Commands 8.1.6 Creating and Populating a Namespace 8.1.7 Namespace Nesting 8.2 Packages 8.2.1 How Packages Work 8.2.2 Internal Details: Files and Variables Used with Packages 8.2.3 Package Commands 8.2.4 Version Numbers 8.2.5 Package Cookbook 8.3 A Tree Object Package with Namespaces 8.3.1 Adding Namespace and Package to tree.tcl 8.3.2 The Tree Object in a Namespace 8.3.3 Procedures and Namespace Scopes 8.4 Bottom Line 8.5 Problems

Introduction to Tk Graphics. 9.1 Creating a Widget 9.2 Conventions 9.2.1 Widget Naming Conventions 9.2.2 Color Naming Conventions 9.2.3 Dimension Conventions 9.3 Common 9.4 Determining and Setting Options 9.5 The Basic Widgets 9.6 Introducing Widgets: label, button, and entry 9.7 Widget Layout: frame, place, pack, and grid 9.7.1 The frame Widget 9.7.2 The place Layout Manager 9.7.3 The pack Layout Manager 9.7.4 The grid Layout Manager 9.7.5 Working Together 9.8 Selection Widgets: radiobutton, checkbutton, menu, and listbox 9.8.1 radiobutton and checkbutton 9.8.2 Pull-down Menus: menu, menubutton and menubars Menubars 9.8.3 Selection widgets: listbox 9.9 Scrollbar 9.9.1 The Basic scrollbar 9.9.2 scrollbar Details 9.9.3 Intercepting scrollbar Commands 9.13.1 Canceling the Future 9.10 The scale Widget 9.11 New Windows 9.12 Interacting with the Event Loop 9.13 Scheduling the Future: after 9.14 Bottom Line 9.15 Problems

Using the canvas widget. 10.1 Overview of the canvas Widget 10.1.1 Identifiers and Tags 10.1.2 Coordinates 10.1.3 Binding 10.2 Creating a canvas 10.3 Creating Displayable Canvas Items 10.3.1 An Exam 10.4 More Canvas Widget Subcommands 10.4.1 Modifying an Item 10.4.2 Changing the Display Coordinates of an Item 10.4.3 Moving an Item 10.4.4 Finding Items, Raising and Lowering Items 10.4.5 Fonts and Text items 10.4.6 Using a Canvas Larger than the View 10.5 The bind and focus Commands 10.5.1 The bind Command 10.5.2 The Canvas Widget bind Subcommand 10.5.3 Focus 10.6 Creating a Widget 10.7 A Help-Balloon: Interacting with the window manager 10.8 The image Object 10.8.1 The image Command 10.8.2 Bitmap Images 10.8.3 Photo Images 10.8.4 Revisiting the delayButton Widget 10.9 Bottom Line 10.10 Problems

The text widget and htmllib. 11.1 Overview of the text Widget 11.1.1 Text Location in the text Widget 11.1.2 Tag Overview 11.1.3 Mark Overview 11.1.4 Image Overview 11.1.5 Window Overview 11.2 Creating a text Widget 11.3 Text Widget Subcommands 11.3.1 Inserting and deleting text 11.3.2 Searching Text 11.3.3 The mark Subcommands 11.3.4 Tags Finding Tags 11.3.5 Inserting Images and Widgets into a text Widget 11.4 HTML Display Package 11.4.1 Displaying HTML Text 11.4.2 Using html_library Callbacks: Loading Images and Hypertext Links 11.4.3 Interactive help with the text widget and htmllib 11.5 Bottom Line 11.6 Problems

Tk Megawidgets. 12.1 Standard Dialog Widgets 12.2 Megawidget Building Philosophy 12.2.1 Display in Application Window or Main Display? 12.2.2 Modal versus Modeless Operation 12.2.3 Widget Access Conventions 12.2.4 Widget Frames 12.2.5 Configuration 12.2.6 Access to Subwidgets 12.2.7 Following Tk Conventions 12.3 Functionality that makes Megawidgets possible 12.3.1 The rename command 12.3.2 The option command 12.3.3 The -class option 12.4 Building a Megawidget 12.5 A Scrolling Listbox Megawidget 12.5.1 scrolledListBox Description 12.5.2 Using the scrolledLB 12.5.3 Implementing the Scrollable ListBox 12.5.4 The scrolledLB Code 12.6 Namespaces and Tk widgets 12.7 Incorporating a Megawidget into a Larger Megawidget 12.8 Making a Modal Megawidget: The grab and tkwait Commands 12.8.1 The grab command 12.8.2 The tkwait command 12.8.3 The modal widget code 12.9 Automating megawidget Construction 12.9.1 Building megawidgets from a skeleton 12.9.2 Building megawidgets from a configuration file 12.9.3 Another technique for building megawidgets 12.10 Bottom Line 12.11 Problems

Writing a Tcl Extension. 13.1 Functional View of a Tcl Extension 13.1.1 Overview 13.1.2 Initialize any persistent data structures 13.1.3 Register new commands with the Interpreter 13.1.4 Accept data from Tcl Interpreter 13.1.5 Returning Results 13.1.6 Returning Status to the Script 13.1.7 Dealing with Persistent Data 13.2 Building an Extension 13.2.1 Structural Overview of an Extension 13.2.2 Naming Conventions 13.3 An Example 13.3.1 demoInt.h 13.3.2 demoInit.c 13.3.3 demoCmd.c 13.3.4 demoDemo.c 13.4 Complex Data 13.5 Bottom Line 13.6 Exercises

Extensions and Package. 14.1 [incr Tcl] 14.2 Expect 14.3 TclX 14.4 Sybtcl and Oratcl 14.5 MySqlTcl 14.6 VSdb Package 14.7 BWidgets 14.8 BLT 14.9 Graphics Extensions: Img 14.10 Bottom Line

Programming Tools. 15.1 Code Formatter 15.1.1 frink 15.2 Code Checkers 15.2.1 tclCheck 15.2.2 ICEM ice_lint 15.2.3 procheck 15.3 Debuggers 15.3.1 Debug 15.3.2 Graphic Debuggers 15.4 GUI Generators 15.4.1 SpecTcl 15.4.2 Visual GYPSY 15.5 Tcl Compilers 15.5.1 ICEM Tcl Compiler 15.5.2 TclPro procomp 15.6 Packaging Tools 15.6.1 TclPro prowrap 15.6.2 FreeWrap 15.6.3 Starkit and Starpack 15.7 Tcl Extension Generators 15.7.1 SWIG 15.7.2 CriTcl 15.8 Integrated Development Environments 15.8.1 ASED 15.8.2 Komodo 15.8.3 MyrmecoX 15.9 Bottom Line

Tips and Techniques. 16.1 Debugging Techniques 16.2 Tcl as a Glue Language: The exec Command 16.3 Common Mistakes 16.4 Coding Tips and Techniques 16.5 Bottom Line


Tcl/Tk (Tool Command Language/Tool Kit) makes it fast and easy to implement any type of application, from games to network analyzers. Tcl/Tk is a full-bodied, mature programming platform used by NASA rocket scientists, Wall Street database experts, Internet designers, and open source programmers around the world. Tcl/Tk's multi-faceted and extensible nature make it ideal for developing end-user GUIs, client/server middleware, Web applications, and more. You can code completely in Tcl, use any of hundreds of extensions, call C or Java subroutines from Tcl/Tk, or use Tcl to glue legacy applications together.

Written from a programmer's perspective, Tcl/Tk: A Developer's Guide describes how to use Tcl's standard tools and the unique features that make Tcl/Tk powerful: including graphics widgets, packages, namespaces, and extensions. With this book an experienced programmer will be able to code Tcl in a few hours. In just a few chapters you will learn about Tcl features that allow you to isolate and protect your code from being damaged in large applications. You will even learn how to extend the language itself.

Tcl/Tk: A Developer's Guide clearly discusses development tools, proven techniques, and existing extensions. It shows how to use Tcl/Tk effectively and provides many code examples. This fully revised new edition is the complete resource for computer professionals, from systems administrators to programmers. It covers versions 7.4 to 8.4 and includes a CD-ROM containing the interpreters, libraries, and tutorials to get you started quickly. Additional materials in the book include case studies and discussions of techniques for the advanced user.

On the CD-ROM *Distributions for Tcl 8.3 and 8.4 for Linux, Solaris, Macintosh, and Windows. *A copy of ActiveTcl from ActiveState. *The latest release of TclTutor. *How-to's and tutorials as well as copies of all the tools discussed in the book. *The author's "Tclsh Spot" articles from :login; magazine and the "Real World" Tcl/Tk chapters from the first edition. *Demo copies of commercial development tools from ActiveState and NeatWare. *Many open source Tcl/Tk development tools. *Tcl/Tk design guidelines.

Key Features

*Brings beginners up to speed quickly. *Overview of Tcl development tools, popular extensions, and packages. *Tips, style guidelines, and debugging techniques for the advanced user.


Programmers, Internet designers, and open source programmers.


No. of pages:
© Morgan Kaufmann 2003
5th May 2003
Morgan Kaufmann
Paperback ISBN:
eBook ISBN:


"The best computer programmers are astonishingly more productive than average. One reason is that they use good tools, and they use them well. Clif Flynt's Tcl/Tk: A Developer's Guide, Second Edition helps you improve your effectiveness as a developer in both of these ways. Tcl is a software language with a great return on investment—it achieves portable, powerful, economical results with great economy. Just a few lines of Tcl are enough to create applications that are both interesting and useful. Clif draws on his deep experience as a front-line developer to help you get the most out of Tcl. He writes clearly, and has organized his book with instructive examples that teach the essentials of Tcl. He covers the right material too: Tcl/Tk packs in not just such long-standing Tcl strengths such as its easy networking and graphical user interface, but also the latest breakthroughs with internationalization, widget upgrades, and StarPacks. Want to take your programming to the next level? Get Tcl/Tk: A Developer's Guide, Second Edition." —Cameron Laird is vice president of Phaseit, Inc. (, where he specializes in Rapid Enterprise Integration with Tcl and related tools. His frequent publications on information technology include the popular "Regular Expressions" column (

Ratings and Reviews

About the Author

Clif Flynt

Clif Flynt is a professional programmer and has been a Tcl advocate since 1994. He has developed Tcl applications for the e-commerce, factory control, computer-based education, network analysis, games, firewall configuration, systems administration, and more. He has taught Tcl/Tk seminars in colleges and corporations around the world and writes regularly on Tcl/Tk for the developer community.

Affiliations and Expertise

CEO, Noumena Corporation, Dexter, Michigan