TK(2) TK(2) NAME Tk - graphics toolkit SYNOPSIS include "tk.m"; tk := load Tk Tk->PATH; Tki: type ref Draw->Image; Toplevel: adt { id: int; image: ref Draw->Image; }; toplevel: fn(screen: ref Draw->Screen, arg: string): ref Toplevel; namechan: fn(t: ref Toplevel, c: chan of string, n: string): string; cmd: fn(t: ref Toplevel, arg: string): string; mouse: fn(screen: ref Draw->Screen, x, y, button: int); keyboard: fn(screen: ref Draw->Screen, key: int); windows: fn(screen: ref Draw->Screen): list of ref Toplevel; intop: fn(screen: ref Draw->Screen, x, y: int): ref Toplevel; imageget: fn(t: ref Toplevel, name: string): (Tki, Tki, string); imageput: fn(t: ref Toplevel, name: string, i: Tki, m: Tki): string; DESCRIPTION The Tk module provides primitives for building user inter- faces, based on Ousterhout's Tcl/TK. The interface to the toolkit itself is primarily the passing of strings to and from the elements of the toolkit using the cmd function; see section 9 of this manual for more information about the syn- tax of those strings. Toplevel creates a new window called a Toplevel, which is under the control of the Tk toolkit, on an existing screen, usually one inherited from the graphics Context (see draw- context(2)). The Toplevel is passed to cmd and namechan (q.v.) to drive the widgets in the window. Arg is a string containing creation options (such as -borderwidth 2) that are applied when creating the toplevel window. Cmd passes command strings to the widgets in the Toplevel t and returns the string resulting from their execution. For example, given a canvas .c in the Toplevel t, x := int tk->cmd(t, ".c cget -actx"); returns the integer x coordinate of the canvas. Bindings can be created in a Toplevel that trigger strings to be sent on Limbo channels. Such channels must be declared to the Tk module using namechan. For example, to Page 1 Plan 9 (printed 12/30/24) TK(2) TK(2) create a button that sends the word Ouch when it is pressed: hitchannel := chan of string; tk->namechan(t, hitchannel, "channel"); tk->cmd(t, "button .b.Hit -text Hit -command {send channel Ouch}"); expl := <-hitchannel; # will see Ouch when button pressed Mouse and keyboard pass mouse and keyboard events to Tk, for delivery to widgets; they are usually called only by a win- dow manager. Windows returns a list of windows on the given screen. Intop returns a reference to the window under point (x,y) on the given screen, returning nil if none is found. Imageget returns copies of the image and mask of the Tk bit- map or Tk widget with the given name associated with Toplevel t; either Image could be nil. Imageput replaces the image (i) and mask (m) of the Tk bitmap image name in t. Both functions return strings that are nil if the operation was successful, but contain a diagnostic on error (eg, invalid top level or name). SOURCE /interp/tk.c /tk/*.c SEE ALSO intro(9), tkcmd(1), sh-tk(1), draw-context(2), wmlib(2), `An Overview of Limbo/Tk', this manual, Volume 2. BUGS Because Tk input is handled globally per Screen, there can be only one instance of a Tk implementation on a given machine, a restriction that will be lifted. Page 2 Plan 9 (printed 12/30/24)