2 Les éléments de texte

Les widgets permettant d'afficher ou de saisir du texte et de manipuler des affichages textuels (polices, justification, coupure de mots, etc...) sont les suivants:

        a) Les labels

Un label (label) est un widget permettant d'afficher une ligne de texte non modifiable par l'utilisateur. Il peut afficher un texte statique ou bien le contenu d'une variable globale.

Exemples de créations de labels :

label .top1.f.lab1 -text "Ceci est un label"
pack configure .top1.f.lab1 -side top
# Création d'un label affichant "Ceci est un label"
.top1.f.lab1 configure -justify center
# Modification de la justification de son contenu

Options les plus utilisées pour les labels

-image img L'image img spécifiée est affichée sur le label
-justify justification Le texte affiché dans le label est justifié de la façon spécifiée
-text t t est le texte associé au label
-textvariable v v est une variable globale dont le contenu est affiché sur le label, et dont toute modification entraîne la modification du texte du label

Commandes les plus utilisées sur les labels

cget option Renvoie la valeur de l'option spécifiée du label
configure options Change les options spécifiées (voir plus haut) du label

        b) Les messages

Un message (message) est un label (ne pouvant afficher d'image) permettant d'afficher un texte sur plusieurs lignes. Il coupera le texte automatiquement (en fin de mot quand c'est possible) si il dépasse la largeur de la fenêtre message ou on pourra insérer des \n pour le forcer à changer de ligne. La particularité d'un message est qu'il possède un aspect basé sur 100 lorsque l'on veut que le message soit aussi large que haut, 200 si on le veut deux fois plus large que haut, 50 quand on le veut deux fois plus haut que large etc... Par défaut celui-ci est à 150. Cet aspect complique l'utilisation de ce widget.

Exemples de création de messages:

message .top1.f.msg -text "Une ligne de texte\nUne autre ligne de texte" -aspect 300 \
-justify center
pack configure .top1.f.msg -side left
# Création d'un message 3 fois plus large que haut.
message .top1.f.msg2 -text "Une ligne de texte\nUne autre ligne de texte" -aspect 300 \
-justify center
pack configure .top1.f.msg2 -side right
# Ce message sera tout en hauteur (normalement 1 caractère par ligne)

Options les plus utilisées pour les messages

-aspect a Le texte est découpé entre caractères pour qu'il soit a/100 fois plus large que long.
-justify justification Le texte affiché dans le message est justifié de la façon spécifiée
-text t t est le texte associé au message
-textvariable v v est une variable globale dont le contenu est affiché sur le message, et dont toute modification entraîne la modification du texte du message

Commandes les plus utilisées sur les messages

cget option Renvoie la valeur de l'option spécifiée du message
configure options Change les options spécifiées (voir plus haut) du message

        c) Les listes de texte

Une liste de texte (listbox) est une boîte contenant une liste de chaînes de caractères que l'utilisateur pourra sélectionner à l'aide du clavier ou de la souris. Le texte sélectionné est copié dans le presse-papier.

Exemples de création de listes de texte:

listbox .top1.f.lst -height 4
pack configure .top1.f.lst -side top
#Création d'une liste de texte qui peut contenir 4 éléments visibles à la fois
.top1.f.lst insert end "Un item"
.top1.f.lst insert end "Encore un autre item"
set t "Un autre item"
.top1.f.lst insert 1 $t

Options les plus utilisées pour les listes de texte

-height h Donne la longueur maximale d'éléments visibles à la fois dans la liste
-selectmode mode Si mode = browse (par défaut) une seule ligne peut être sélectionnée.

Si mode = multiple plusieurs lignes peuvent être sélectionnées: un click sur une ligne sélectionnée la déselectionne, un click sur une ligne non sélectionnée la sélectionne.

Si mode = extended plusieurs lignes peuvent être sélectionnées: la sélection fonctionne à la manière des sélections sous windows: un click seul sélectionne 1 et 1 seule ligne, un click+shift sélectionne tous les éléments entre le dernier élément sélectionné et le click, ctrl+click sélectionne l'élément clické en plus des autres.

Commandes les plus utilisées sur les listes de texte

activate index L'élément n° index est sélectionné (0 correspond au premier élément)

Dans la suite, index est soit un entier, soit end pour le dernier élément+1, ou active pour l'index du dernier élément sélectionné

cget option Retourne la valeur associée à l'option option spécifiée
configure ?options? Configure les options données
curselection Renvoie la liste des indexes des éléments sélectionnés
delete index1 index2 Détruit les éléments compris entre les deux indexes donnés
get index1 index2 Renvoie la liste des valeurs contenues dans les lignes comprises entre les deux indexes
insert index ?elts? Insère le ou les éléments sous forme de chaînes de caractères dans la liste à partir de la position sépcifiée par index

        d) Les entrées de texte

Une entrée de texte (entry) est un label modifiable par l'utilisateur. Il ne peut (forcément) pas contenir d'image ni de texte statique => utilisation d'une variable globale associée par l'option -textvariable.

Exemples de création d'entrées de texte:

entry .top1.f.e -justify left -textvariable E
pack configure .top1.f.e -side top
# Création d'une entrée de texte associée à la variable E

Options les plus utilisées pour les entrées de texte

-justify justification Le texte affiché dans l'entrée est justifié de la façon spécifiée
-state s L'entrée est disponible (s = normal) ou indisponible (s = disabled)
-textvariable v v est une variable globale dont le contenu est affiché sur l'entrée, et dont toute modification entraîne la modification du texte de l'entrée. Bien sûr toute modification de l'entrée par l'utilisateur est immédiatement répercutée sur v
-width w Largeur en nombre de caractères de l'entrée

Commandes les plus utilisées sur les entrées de texte

cget option Renvoie la valeur de l'option spécifiée de l'entrée
configure ?options? Change les options spécifiées (voir plus haut) de l'entrée

        e) Le texte

Un texte (text) est un message modifiable par l'utilisateur. Il offre en plus davantage de fonctionnalités, et sa documentation est assez longue. Il peut, en plus du texte, contenir d'autres widgets. Il permet, par un système de tags associés à certains éléments créés (texte, boutons, ...) d'effectuer la même action sur tous les objets taggés par le même tag en une seule commande. Tagger un objet, c'est un peu comme l'assigner à un groupe, quand on effectue une action sur ce groupe, on l'effectue sur chaque objet le composant.

Un exemple, très simple, permettant l'affichage du contenu d'un fichier texte dans une fenêtre de texte:

text .top1.f.t
pack configure .top1.f.t -side top -expand 1 -fill both
# Création d'un widget text
set F [open $FileName r]
#Ouverture du fichier en lecture
while {[eof $F]==0} {
# Jusqu'à la fin du fichier
gets $F UneLigne
# Lire une ligne du fichier
.top1.f.t insert end $UneLigne
.top1.f .t insert end "\n"
# L'afficher dans le widget de texte
}
close $F

Options les plus utilisées pour les textes

-height h Le widget possèdera h lignes visibles.
-state s Le texte est modifiable (s = normal) ou non (s = disabled)
-width w Largeur visible en nombre de caractères du texte
-wrap wr Le texte sera coupé si nécessaire en fin de ligne (wr = char), en fin de ligne mais sur fin de mot (wr = word), ou ne sera pas coupé (wr = none)

Commandes les plus utilisées sur les textes

cget option Renvoie la valeur de l'option spécifiée du text
configure ?options? Change les options spécifiées du text
delete index1 ?index2? Supprime le texte compris entre les deux indexes (voir la partie index pour la notation des indexes)
get index1 ?index2? Renvoie le texte compris entre les deux indexes (voir la partie index pour la notation des indexes)
insert index chars ?tags? Insère le texte spécifié à l'index spécifié taggé par les tags donnés (voir index)

Définition des indexes

Les indexes sont donnés dans le format base ?modificateurs? où base peut être donnée sous la forme:

ligne.colonne, @x,y où x et y, coordonnées en pixels, indiquent le caractère le plus proche, end, la fin du texte, nomtag.first qui est le premier caractère taggé par nomtag, nomtag.last, le dernier.

Les modificateurs sont:

+ nb chars, - nb chars, + nb lines, - nb lines, où nb est un entier, linestart, lineend, wordstart, wordend.

Il est à noter que les widgets listbox, entry et text offrent des fonctions de sélection/couper/copier/coller compatibles avec le système d'exploitation.