[hopefully someone will write an introduction to tk, explaining its virtues]
Tk is a Tcl extension designed to make creating GUI interfaces simple, yet giving said applications remarkable power for all their simplicity.
The Tk canvas is one of the more powerful widgets developers have found. The Tk text widget has built in hypertext and undo/redo capability. Tk was designed for rapid development.
Hints for beginners (things that may not be obvious if you come to Tk from the wrong community):
The window concept
To illustrate some of these points. you can start wish and type the following commands
% canvas my_canvas -width 100 -height 100 bad window path name "my_canvas"
my_canvas can't be the name of a window, since it doesn't begin with a period (.).
% canvas .my_canvas -width 100 -height 100 .my_canvas
Much better. Now that we have a 100x100 pixels canvas, let's put something on it, e.g. a thick line from (10,10) to (90,90).
% .my_canvas create line {10 10 90 90} -width 10 1
The line is item 1 on this canvas, but strangely enough nothing shows up on the screen (Wish's window is as empty as when we began). Even worse, there seems to be some confusion about how large the canvas is:
% winfo width .my_canvas 1 % .my_canvas cget -width 100
The reason for this is found in the following:
% winfo ismapped .my_canvas 0
The canvas doesn't appear on screen because it isn't mapped yet. pack can do that for us:
% pack .my_canvas
Bam! A thick line appears in wish's window (that might also resize because of this). winfo returns data more in line with what one might expect:
% winfo ismapped .my_canvas 1 % winfo width .my_canvas 106
Some example programs: