boucle des évènements

 

Les évènements de Tk sont traités par une boucle des évènements.

De quoi s'agit-il ?

Cette boucle des évènements est liée à la boucle des évènements du gestionnaire de fenêtres (Aqua, KDE, Windows...).

Le gestionnaire de fenêtres

Le gestionnaire de fenêtres est la couche logicielle qui gère les fenêtres et leur affichage sur l'écran. Cet écran est organisé en un bureau qui comprend principalement un menu et une surface pour afficher les fenêtres et les icones. Le gestionnaire de fenêtres répond aux évènements (principalement du clavier ou de la souris) qui contrôlent le bureau. Il est aussi responsable de la décoration des fenêtres (barre de titre, bouton d'iconification, d'agrandissement ou de fermeture) qui est la principale interface de contrôle des fenêtres du bureau.

Il est une chose dont le gestionnaire des fenêtres n'est pas responsable c'est du contenu des fenêtres. Celui-ci est de la seule responsabilité de l'application à qui appartient chaque fenêtre (une application peut être propriétaire de plusieurs fenêtres ou d'aucune).

L'application graphique

Une application est graphique si elle peut coopérer avec le gestionnaire de fenêtres. La plupart du temps cette coopération permet d'afficher des informations dans une (ou plusieurs) fenêtre. Pour coopérer, l'application doit enregistrer une procédure spéciale qui lui permet de répondre aux évènements qu'elle gère.

La coopération

L'application enregistre auprès du gestionnaire la procédure associée aux évènements.

Lorsqu'elle veut créer une fenêtre, elle crée un évènement CREATE WINDOW. Recevant l'évènement, le gestionnaire mémorise une structure (un simili objet), lui associe un identifiant (un handle dans la terminologie UNIX) et transmet l'évènement à la procédure de l'application Celle-ci enregistre alors l'identifiant.

Lorsque l'utilisateur (bin oui, c'est lui qui perturbe cette belle harmonie, mais bon, sans lui on ne voit pas l'intérêt d'un truc aussi compliqué) crée un évènement sur cette fenêtre (touche clavier, clic souris...), un objet évènement est transmis à la procédure de l'application. Cet objet évènement est un ensemble d'informations comprenant au moins l'identifiant de la fenêtre et le type de l'évènement. Charge à la procédure de créer de nouveaux évènements destinés à modifier le contenu de la fenêtre (ou une autre).

La boucle

Le gestionnaire d'évènements exécute la boucle suivante :

  tant que vivant :
    - attendre un évènement
    - pré-traiter l'évènement reçu (ex: CREATE WINDOW)
    - rechercher si une application gère cet évènement
    - si oui : appeller la procédure enregistrée par cette application en lui passant
               toutes les informations nécessaires pour traiter l'évènement
               (ex: MAGNIFY WINDOW)
    - post-traiter l'évènement reçu (ex: DESTROY WINDOW)
    - refaire la boucle

Tcl/Tk

Tcl/Tk est une application graphique qui coopère avec le gestionnaire de fenêtres et donc enregistre une procédure de gestion des évènements. Cette procédure va répondre aux évènements destinés à toutes les fenêtres gérées par Tk : les toplevels ET les widgets (qui sont des fenêtres à part entière). Charge pour Tk de sous-traiter ces évènements aux callback fournis par les programmeurs et associés à ces évènements.

C'est cette procédure que l'on appelle la boucle des évènements de Tk. Et l'on comprend maintenant pourquoi Tk ne sait pas gérer les autres fenêtres du gestionnaire de fenêtres : ce n'est pas sa responsabilité car il n'est pas un gestionnaire de fenêtres (et c'est souvent dommage).

Encore quelques mots sur Tk. Tk est un package de Tcl. Lors de l'interprétation d'un script, c'est à lui que Tcl s'adresse pour les widgets et les ressources graphiques. Tk crée alors les toplevels, les widgets, les ressources graphiques ET enregistre les callbacks. A la fin de cette interprétation et sans Tk, Tcl s'arrête. Avec Tk, lors de l'enregistrement de la procédure de gestion des évènements, le process est mis en attente d'évènements. Le process ne se terminera normalement que sur demande explicite de la procédure suite au traitement d'un évènement.


Voir aussi


auteurs de l'article


Encyclopédie Tcl