LA LISTBOX
Une listbox est une boite dans laquelle il y a plusieurs lignes où vous pouvez choisir dans une liste. Ce widget simple ne gère que le texte et une seule colonne.
Voici différents tutoriels pour utiliser la listbox, manipuler les données etc...
Ajouter une ligne au début
Pour ajouter une Item dans la liste il suffit d'écrire :
nomduwidget INSERT index Valeur
ou :
exemple :
.maliste insert 0 "hello la Terre"
Effacer une ligne
Pour effacer une ligne, écrire ceci:
nomduwidget DELETE index
où :
exemple :
.maliste delete 2
effacera la ligne 3 (la première ligne commence par l'index 0)
Récupérer le texte de la ligne cliquée
Pour récupérer le contenu de la ligne cliqué :
nomduwidget GET active
où :
Exemple :
puts [.maliste get active]
Ce code est à mettre entre crochet car nous récupérons l'évaluation de cette commande c'est à dire le texte de la ligne et non son index
Une remarque importante :
Le fait d'écrire cette commande renvoi n-1 , c'est à dire l'index cliqué avec un retard d'un index.
Il faudra pour éviter ce problème passer par une variable et le problème est résolu.
Exemple ici :
bind .list1 <<ListboxSelect>> {set idx [.list1 curselection]; puts $idx}
Idx aura bien la valeur du bon index cliqué.
Une autre façon est d'utiliser %W qui représente le widget cliqué comme ceci :
puts [%W curselection]
Ajouter une ligne à la fin
Utiliser END comme ceci :
.maliste insert end "hello la Lune"
Récupérer le nombre de lignes
Pour connaître le nombre de ligne actuel écrivez :
puts [.maliste size]
Effacer toute la listbox d'un coup
Il suffit d'utiliser la commande DELETE et définir le début et la fin de la liste comme ceci :
.maliste delete 0 [ expr [.maliste size] -1 ]
Effacement de l'index 0 à (calcul du nombre de ligne moins 1)
Nous aurions aussi tout simplement pu écrire :
.maliste delete 0 end
qui veut dire : Efface ma liste de l'item 0 à la fin.
Récupérer l'index de la ligne sélectionnée
Pour avoir l'index de la ligne sélectionnée écrivez ce code :
puts [.maliste index active]
REcuperer toute le contenu de la listbox sous forme de liste
Pour récupérer tout le contenu de la listbox sous forme de liste, écrivez ceci :
set maliste [.malistbox get 0 end]
Vous l'aurez compris :
LES evenements de la listbox
Si vous souhaitez un simple clic gauche écrivez ceci :
bind .list1 <1> {puts "Commande à éxécuter"}
Pour un double clic sur la listbox :
bind .list1 <Double-1>{puts "Commande à éxécuter"}
Si vous souhaitez sélectionner à l'aide du clavier par les flèches haute et basse utilisez plutôt :
bind .list1 <<ListboxSelect>> {puts "Commande à éxécuter"}
et pour afficher l'index sélectionné avec les flèches du clavier, voici l'exemple complet :
bind .list1<<ListboxSelect> > {set idx [.list1 curselection]; puts $idx}
pour un clic droit :
bind .list1 <2> {set idx [.list1 curselection]; puts $idx}
changer la couleur d'arriere plan ou d'avant plan D'une seule ligne
Pour l'avant plan écrivez ceci :
.maliste itemconfigure $idligne -foreground #FF0000
Le résultat est le texte en rouge.
Pour l'arrière plan :
.maliste itemconfigure $idligne -background #808080
Le résultat sera le fond de la ligne pointée par idline (l'index de la ligne) sera en gris foncé.
Remarque :
Il n'est pas possible de changer la police d'une seule ligne mais de toute la listbox.
Ainsi par exemple il n'est pas possible de mettre en gras une ligne.
selectionner une ou plusieurs lignes directement depuis le code
Pour sélectionner une ligne, soit vous cliquez dessus avec la souris, soit vous pouvez écrire ce code :
.maliste select set 1 1
détaillons cette ligne :
Une ligne est donc sélectionnée.
Pour deux lignes vous l'aurez compris :
.maliste select set 1 2
Editer ou modifier une ligne de la listbox
Je n'ai pas trouvé sur la documentation officielle ou sur internet comment modifier directement une ligne de la listbox.
J'ai donc créé ce code qui visiblement marche très bien. Pour editer/modifier une ligne, je code les étapes suivantes :
Ce qui donne le code suivant :
set id [.malistbox index active] .malistbox delete $id $id .malistbox insert $id "Mon nouveau texte"
Remarque :
la commande DELETE nécessite deux paramètres :
l'id de début et l'id de fin car nous pourrions effacer plusieurs lignes d'un coup. Pour notre exemple nous définissons uniquement l'id à effacer pour une seule ligne