| Preface | p. xiii |
| Hello, Perl/Tk | p. 1 |
| Perl/Tk Concepts | p. 2 |
| Some Perl/Tk History | p. 2 |
| Getting Started with Perl/Tk | p. 6 |
| Hello World Example | p. 12 |
| Unsolicited Advice | p. 13 |
| Debugging and Prototyping Perl/Tk Programs | p. 16 |
| Geometry Management | p. 19 |
| The pack Geometry Manager | p. 20 |
| The grid Geometry Manager | p. 41 |
| The place Geometry Manager | p. 54 |
| The form Geometry Manager | p. 61 |
| Geometry Management Summary | p. 70 |
| Fonts | p. 71 |
| Experimenting with Fonts | p. 71 |
| Dissecting a Font | p. 73 |
| Using Fonts | p. 74 |
| Using Fonts Dynamically | p. 76 |
| Font Manipulation Methods | p. 77 |
| Button, Checkbutton, and Radiobutton Widgets | p. 81 |
| Creating Button Widgets | p. 83 |
| Standard Options for Each Button Type | p. 83 |
| Table of Options for Button-Type Widgets | p. 84 |
| Displaying Text on Buttons | p. 87 |
| Displaying an Image or Bitmap | p. 88 |
| Checkbutton and Radiobutton Indicator Status | p. 90 |
| On and Off Values for a Checkbutton | p. 92 |
| Radiobutton Values | p. 92 |
| The -command Option | p. 93 |
| Disabling a Button | p. 95 |
| Text Manipulation | p. 97 |
| Altering the Button's Style | p. 99 |
| Changing the Size of a Button | p. 101 |
| Adding a Keyboard Mapping | p. 103 |
| Color Options | p. 104 |
| Indicator Colors | p. 106 |
| Hiding the Indicator | p. 106 |
| Focus Options | p. 107 |
| Altering the Highlight Rectangle | p. 107 |
| Configuring a Button | p. 108 |
| Flashing the Button | p. 109 |
| Invoking the Button | p. 110 |
| Turning a Checkbutton/Radiobutton On and Off | p. 110 |
| Label and Entry Widgets | p. 111 |
| The Label Widget | p. 111 |
| The Entry Widget | p. 117 |
| The Perl/Tk LabEntry Mega-Widget | p. 132 |
| The Scrollbar Widget | p. 133 |
| Defining Scrollbar Parts | p. 133 |
| The Scrolled Method | p. 135 |
| The Scrollbar Widget | p. 137 |
| Examples | p. 145 |
| The Listbox Widget | p. 149 |
| Creating and Filling a Listbox | p. 150 |
| Listbox Options | p. 150 |
| Selection Modes | p. 152 |
| Colors | p. 153 |
| Listbox Style | p. 153 |
| Configuring a Listbox | p. 154 |
| Inserting Items | p. 155 |
| Deleting Items | p. 155 |
| Retrieving Elements | p. 156 |
| Selection Methods | p. 156 |
| Moving to a Specific Index | p. 157 |
| Translating Indexes | p. 158 |
| Counting Items | p. 158 |
| Active Versus Selected | p. 158 |
| Bounding Box | p. 158 |
| Finding an Index by y Coordinate | p. 159 |
| Scrolling Methods | p. 159 |
| Listbox Virtual Events | p. 159 |
| Listbox Example | p. 160 |
| The Text, TextUndo, and ROText Widgets | p. 162 |
| Creating and Using a Text Widget | p. 162 |
| Text Widget Options | p. 163 |
| A Short Break for a Simple Example | p. 168 |
| Text Indexes | p. 169 |
| Text Tags | p. 171 |
| Inserting Text | p. 179 |
| Deleting Text | p. 180 |
| Retrieving Text | p. 181 |
| Translating Index Values | p. 181 |
| Comparing Index Values | p. 181 |
| Showing an Index | p. 182 |
| Getting the Size of a Character | p. 182 |
| Getting Line Information | p. 182 |
| Searching the Contents of a Text Widget | p. 182 |
| Scrolling | p. 183 |
| Marks | p. 183 |
| Embedding Widgets | p. 185 |
| Internal Debug Flag | p. 187 |
| The Perl/Tk Text Widget Extended Methods | p. 188 |
| The TextUndo Widget | p. 191 |
| The ROText Widget | p. 193 |
| The Canvas Widget | p. 194 |
| Creating a Canvas | p. 194 |
| The Canvas Coordinate System | p. 195 |
| The Scrollable Region | p. 196 |
| Using bind with a Canvas | p. 196 |
| Canvas Options | p. 197 |
| Creating Items in a Canvas | p. 201 |
| Configuring the Canvas Widget | p. 213 |
| Configuring Items in the Canvas Widget | p. 213 |
| Tags | p. 214 |
| Retrieving Bounding Box Coordinates | p. 216 |
| Translating Coordinates | p. 217 |
| Moving Items Around | p. 217 |
| Changing the Display List | p. 218 |
| Deleting Items | p. 218 |
| Deleting Tags | p. 218 |
| Determining Item Type | p. 219 |
| Setting Keyboard Focus | p. 219 |
| Rendering the Canvas as PostScript | p. 219 |
| Scaling the Canvas | p. 220 |
| Scanning | p. 221 |
| A Drawing Program Example | p. 221 |
| The Scale Widget | p. 224 |
| Creating a Scale | p. 224 |
| Assigning a Callback | p. 227 |
| Orientation | p. 227 |
| Minimum and Maximum Values | p. 227 |
| Displayed Versus Stored Value | p. 227 |
| Adding a Label | p. 228 |
| Displaying Value Increments | p. 228 |
| Changing the Size of the Scale | p. 229 |
| Options You'll Probably Never Need | p. 229 |
| Configuring a Scale | p. 229 |
| Getting the Value of a Scale | p. 230 |
| Setting the Value of a Scale | p. 230 |
| Determining Coordinates | p. 230 |
| Identifying Parts of a Scale | p. 230 |
| Frame, MainWindow, and Toplevel Widgets | p. 231 |
| Creating a Frame | p. 232 |
| Creating a Toplevel Widget | p. 233 |
| Options | p. 233 |
| Frame Methods | p. 238 |
| Toplevel Methods | p. 238 |
| Creating Multiple Main Windows | p. 247 |
| Putting Two Main Windows to Work | p. 249 |
| The Menu System | p. 253 |
| Menu System Components | p. 253 |
| Menubars and Pulldown Menus | p. 259 |
| The Win32 System Menu Item | p. 266 |
| Classical Menubars | p. 266 |
| Popup Menus | p. 270 |
| Option Menus | p. 275 |
| Menu Virtual Events | p. 279 |
| Pie Menus | p. 279 |
| Miscellaneous Perl/Tk Methods | p. 284 |
| Managing Widgets with configure and cget | p. 284 |
| Building a Family Tree | p. 287 |
| Widget's ID | p. 288 |
| Color-Related Methods | p. 289 |
| The Application's Name | p. 290 |
| Widget Existence | p. 290 |
| Is the Widget Mapped? | p. 291 |
| Converting Screen Distances | p. 291 |
| Size of Widget | p. 291 |
| Widget Position | p. 292 |
| Screen Information | p. 294 |
| Atom Methods | p. 296 |
| Ringing a Bell | p. 296 |
| Clipboard and Selection Methods | p. 296 |
| Destroying a Widget | p. 299 |
| Focus Methods | p. 299 |
| Grab Methods | p. 302 |
| Marking a Widget Busy and Unbusy | p. 302 |
| Widget Mapping and Layering | p. 303 |
| Interapplication Communication | p. 304 |
| Waiting for Events to Happen | p. 304 |
| Time Delays | p. 305 |
| Parsing Command-Line Options | p. 306 |
| Really Miscellaneous Methods | p. 306 |
| Creating Custom Widgets in Pure Perl/Tk | p. 308 |
| A Mega-Widget Quick-Start | p. 308 |
| The Perl/Tk Class Hierarchy | p. 316 |
| Mega-Widget Implementation Details | p. 319 |
| Composite Mega-Widgets | p. 330 |
| Derived Mega-Widgets | p. 335 |
| Packaging a Mega-Widget for Public Distribution | p. 351 |
| Anatomy of the MainLoop | p. 356 |
| Creating a Callback | p. 358 |
| Binding to Events | p. 361 |
| The bindtags Command | p. 372 |
| Executing Nonblocking System Commands | p. 378 |
| Tracing Perl/Tk Variables | p. 388 |
| Nonblocking Wait Activities | p. 391 |
| Splash Screens | p. 394 |
| Synthesizing Virtual Events | p. 399 |
| Coexisting with Other GUI Main Loops | p. 401 |
| User Customization | p. 406 |
| Using the Command Line | p. 407 |
| Using the Option Database | p. 410 |
| Images and Animations | p. 417 |
| An Overview of Perl/Tk Image Types | p. 417 |
| Methods Common to All Image Types | p. 419 |
| Bitmap Primitives | p. 420 |
| DefineBitmap | p. 422 |
| The Bitmap Image Type | p. 422 |
| The Pixmap Image Type | p. 426 |
| The Photo Image Type | p. 427 |
| The Compound Image Type | p. 439 |
| Tk::Animation | p. 440 |
| tkneko--Animating the Neko on a Canvas | p. 441 |
| Tile and Transparent Images | p. 444 |
| Miscellaneous Image Methods | p. 447 |
| Simple Photo Rotations | p. 447 |
| A Tk Interface Extension Tour | p. 451 |
| Display Items | p. 452 |
| Item Styles | p. 454 |
| The TList Widget | p. 457 |
| The HList Family of Widgets | p. 459 |
| Tix Images | p. 471 |
| Interprocess Communication with Pipes and Sockets | p. 472 |
| Handling Unsolicited Media Changes | p. 473 |
| IPADM Design Considerations | p. 476 |
| The Perl/Tk IPADM Client, ipadm | p. 478 |
| The IPADM Helper, ipadmh | p. 486 |
| The IPADM Daemon, ipadmd | p. 487 |
| Polling Win32 Sockets | p. 492 |
| IPC with send | p. 494 |
| Security and Inter-Language Considerations | p. 494 |
| Computing [pi] with Parallel Message Passing | p. 497 |
| TclRobots | p. 503 |
| C Widget Internals | p. 510 |
| The Tk::Square Widget | p. 510 |
| Interfacing tkSquare.c with Perl/Tk | p. 523 |
| Building and Testing Tk::Square | p. 528 |
| How Not to Port Tk::Square | p. 529 |
| Perl/Tk and the Web | p. 531 |
| Library for WWW Access in Perl | p. 531 |
| The PerlPlus Browser Plug-in | p. 554 |
| Plethora of pTk Potpourri | p. 558 |
| pTk Special Variables and Exporter Symbols | p. 558 |
| Manipulating the Cursor | p. 560 |
| Dialog Boxes | p. 563 |
| The Adjuster Widget | p. 569 |
| The Balloon Widget | p. 571 |
| The BrowseEntry Widget | p. 572 |
| The LabFrame Widget | p. 575 |
| The NoteBook Widget | p. 576 |
| The Pane Widget | p. 580 |
| The ProgressBar Widget | p. 581 |
| Widgets Not in the Perl/Tk Distribution | p. 583 |
| Installing Perl/Tk | p. 585 |
| Options and Default Values for Each Widget | p. 587 |
| Complete Program Listings | p. 646 |
| Index | p. 717 |
| Table of Contents provided by Syndetics. All Rights Reserved. |