Effective Tcl/Tk Programming: Writing Better Programs with Tcl and Tk
Preface  It's easy to get started with Tcl/Tk. Just follow the steps in Appendix A to obtain the wish program and start it up. Then type in a few lines of code, like this:% button .b -text "Hello, World!" -command exit => .b% pack .b  You'll see the Hello, World! button appear as soon as you enter the pack command. On Windows 95, it will look like this:You don't have to edit any makefiles or fight with a compiler. You don't need to know everything about the X window system or the Microsoft Foundation Classes. You don't need to wade through pounds of confusing documents to find symbols, such as  XA_FONT_NAME. Instead, you type a few lines of Tcl code and immediately see the results.As you learn more about the Tk widgets, you can write lots of simple programs. With a text widget and 100 lines of Tcl code, you can put together a program for sending electronic mail (e-mail) messages. With a canvas widget and 200 lines of Tcl code, you can create a simple drawing editor.A few other Tcl/Tk books will help you get started. John Ousterhout's Tcl and the Tk Toolkit starts with a complete overview of the Tcl language and then goes on to describe each of the Tk widgets. The book even describes how to add new functionality to Tcl/Tk by integrating your own C code into the wish program. Brent Welch's book  Practical Programming in Tcl and Tk is another good source of Tcl/Tk code examples.After reading one of the introductory Tcl/Tk books, you will be well acquainted with the nuts and bolts. But you may not have a good understanding of how they fit together to  make an application.We wrote this book to pick up where the others leave off. We assume that you understand some of the Tcl language and that you've written a few simple Tcl/Tk programs. If not, you can pick it up as you read along. But instead of explaining the basics, we focus on areas that are commonly misunderstood-such as the pack command, the bind mechanism, and the canvas widget. We not only explain how these things work but also show how you can use them to build powerful applications.We explain how the packer works and then show how you can use itto create a tabbed notebook that displays "pages" of widgets.  We explain how binding tags work and then show how you can usethem to handle the modes in a drawing editor.  We explain how the canvas works and then show how you can use itto build a progress gauge, a color wheel, and a calendar.Along the way, we describe the lessons that we've learned from developing many thousands of lines of Tcl/Tk code. We show you software architectures and programming techniques that will make your Tcl/Tk code easier to maintain. For example, we show how toCreate client/server applications  Package Tcl/Tk code into libraries of reusable components  Use lists and arrays as data structures  Handle common quoting problemsAbove all else, we try to present a holistic view of application development. In Chapter 1, we show you how to go about designing an application--from the initial concept to a working prototype to a finished product. Throughout the book, we develop several useful applications: a desktop calculator, a drawing editor, and a daily calendar that will store all of your appointments. In Chapter 8, we show you how to add polish to your finished applications and how to deliver them to customers.In the course of this book, we develop more than two dozen useful components, including a toolbar, a paned window, a balloon help facility, and a confirmation dialog. We provide complete source code for these components in the software that accompanies this  book. You can download this software from the site  awl/cp/efftcl/efftcl.html. We encourage you to study these examples and to use them to build your own Tcl/Tk applications!All of the examples in this book have been carefully designed to work with all recent versions of Tcl/Tk, including:   Tcl 7.5 / Tk 4.1  Tcl 7.6 / Tk 4.2  Tcl 8.0 / Tk 8.0The examples should work with later releases as well. Most of our experience with Tcl/Tk comes from UNIX-based systems, so you will  see a lot of references to UNIX throughout the book. But Tcl/Tk is not limited to UNIX systems. The Tcl 8.0 / Tk 8.0 release works cross-platform on UNIX, Windows 95/NT/3.1, and Macintosh systems. Almost all of our examples work identically on all three platforms. (Of course, some examples rely on such programs as /usr/lib/sendmail, which are available only on a UNIX system. Those examples will not work cross-platform without some modification.) Throughout the book, we've included screen snapshots from the various platforms to highlight the cross-platform capability.  Acknowledgments  Many people have made this book possible. Thanks to John Ousterhout and his team at Sun Microsystems for creating such a marvelous toolkit. Thanks to Mike Hendrickson and the staff at Addison Wesley Longman for their encouragement and support in producing this book. Thanks to Brian Kernighan for nudging us in the right direction and for his careful reviews and helpful comments. Thanks to Don Libes, Jeff Korn, Jeffrey Hobbs, and Jim Ingham for uncovering a number of weak spots in our material. Thanks to Evelyn Pyle for her meticulous proofreading and for smoothing out the wrinkles in our grammar. And  thanks to all of the other reviewers who have made this work stronger: Ron Hutchins, Raymond Johnson, Steve Johnson, Oliver Jones, Joe Konstan, David Richardson, Alexei Rodriguez, and Win Treese.Mark Harrison would like to thank his many colleagues at DSC Communications Corporation for their involvement and for their practical suggestions about incorporating Tcl into mission-critical products. In particular, Mark Ulferts and Kris Raney were especially helpful in this regard.Michael McLennan would like to thank Sani Nassif for getting him started with Tcl/Tk; George Howlett for teaching him much of what he knows about software; John Tauke for making Tcl/Tk development a legitimate business activity at Bell Labs; Kishore Singhal, Prasad Subramaniam, and the management at Bell Labs for supporting this work; Joan Wendland, his friend and mentor; and Maria, Maxwell and Katie, for making him smile.Mark HarrisonMichael McLennanSeptember 1997   0201634740P04062001