Introduction a Tk

Tk le Toolkit de Tcl :WISH

Tk a ete crée en tant que Toolkit graphique pour le langage Tcl. D'ailleurs on parle souvent de Tcl/Tk prononce Ticket/Tickelle.

C'est un toolkit graphique multi-platforme qui a le look du système sur lequel on l'utilise. Il s'associe parfaitement au langage Tcl qui lui aussi est multi-platforme. Le grand avantage de Tcl et de Tk est leurs simplissités. Ce couple permet de faire des applications très rapidement et d'une extrême porbabilité. Et tout comme il existe un tclsh pour tcl , il existe un interpreteur Tk et Tcl : wish

Bonjour monde !

En introduction, je souhaite vous montrer l'exemple classique montrant la facilité et la simplisité de la mise en oeuvre de Tcl/Tk.
pack [ label .l -text "Bonjour monde" ]

Par rapport a du gtk:
#include 
nt main( int   argc,
          char *argv[] )
{
   /* GtkWidget is the storage type for widgets */
    GtkWidget *window;
    GtkWidget *button;

    gtk_init(&argc, &argv);
   /* create a new window */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    button = gtk_button_new_with_label ("Bonjour Monde");
    gtk_container_add (GTK_CONTAINER (window), button);
    gtk_widget_show (button);

    /* and the window */
    gtk_widget_show (window);
    gtk_main ();

    return(0);
}
Par rapport à du Motif
/* COMPILE  cc xmhello.c -L/usr/X11R6/lib  -lXm -lXt -lX11 -lXmu -o xmhello */

#include 
#include 

/* Widget */

	Widget      main_widget, pushb;

main(int argc, char **argv)
{
	Widget      form;
	Arg         args[1];
	int         ac = 0;
	XmString    label_str;

	main_widget = XtInitialize(argv[0], "test", NULL, 0, &argc, argv);
	label_str = XmStringCreate("Bonjour Monde", XmSTRING_DEFAULT_CHARSET);
	XtSetArg(args[ac], XmNlabelString, label_str);
	ac++;
	pushb = XmCreatePushButton(main_widget, "hello", args, ac);
	XtManageChild(pushb);
	XtRealizeWidget(main_widget);
	XtMainLoop();
}
Cependant il est difficile de comparer du source d'un langage scriptique et un langage compilé. Il faut prendre en compte aussi d'autres aspects comme la taille d'execution en mémoire... Disons que pour faire un coucou au monde Tk c'est plus simple :). Mais il faudra peut etre retenir plus que le look du toolkit ( il y vrai pas trés joli sous X ) le concept, les idées.
Par ailleurs il y a eu des extensions pour modifier l'apparence des Widgets Tk, comme par exemple QTk et TkStep.
Il faut préciser une chose très importante: Une interface avec Tk a été réalisée pour plus part des langages. Et comme pour beaucoup de langage scriptique Tcl-Tk est multi platforme.

Création d'objets graphique Tk Ce toolkit graphique propose tout les objets graphiques de bases pour la construction d'IHM ( Interface Homme Machine ) ;c'est a dire:

    Si vous voulez avoir une démo de l'ensemble des widget disponible allez voir dans le répertoire /usr/local/lib/tk8.0/demos/ et lancez widget.

    L'ensemble de ces objets graphiques reste assez limité . C'est pourquoi plusieurs personnes morales ou physiques ont créé des extensions dont l'une des plus célèbre : Tix les widgets Incr Tcl et récemment les excellents BWidget, l'ensemble des extensions est recencé sur le site de scriptics: Pour plus de détails

    hiérarchisation des objets graphiques dans l'interface Les interfaces graphiques sont créé sur le modèle d'une arborecense de fenêtres ( rectangles ) qui ont leurs propres fonctionnalités.
    Les noeuds de l'arborecense sont des contenaires d'objets graphiques tel que le bouton par exemple. Cette arborecense est décrit en langage Tcl/Tk par
    • le . pour la racine ( fenêtre mère )
    • le .(nom_contenaire.)*nom_objet_graphique
    Lorsque vous lancez le programme wish, alors une fenêtre apparait. C'est celle-ci qui correspond a la racine ..

    Création d'objets graphique : Le "hello world"

    Pour créer n'importe quel objet graphique, la commande Tcl est du type:
    nom_objet .(nom_contenaire.)*nom_objet_graphique [propriete valeur]
    Exemple: label .monlabel -text "hello world"

    Comme vous pouvez le voir s'éffectue bien en donnant le nom de l'object graphique à créer , ici un label puis ne nom du conteneur , ici . correpondant a la fenêtre principale, puis les propriétées ( -text "hello word" ). l peut signaler ici que ces arguments peuvent être accedé ou modifié à tout moment après la création de l'objet graphique.