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 :

  • Nomduwidget : Nom donné au widget
  • insert : commande insérer
  • Index : numéro de la ligne (commence par 0)
  • Valeur : Texte à insérer

exemple :

.maliste insert 0 "hello la Terre"

Effacer une ligne

Pour effacer une ligne, écrire ceci:

nomduwidget DELETE index

où :

  • nomduwidget : nom de la listbox
  • delete : commande effacer
  • index : numéro de la ligne (commence par 0)

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ù :

  • nomduwidget : nom de la listbox
  • get : commande obtenir le contenu
  • Active : ligne sélectionnée

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 :

  • maliste est la variable qui reçoit la liste
  • .malistbox est la listbox dont on veut récupérer le contenu
  • 0 est l'index de début de liste
  • end est l'index de fin de liste

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 :

  • maliste : listbox
  • select : commande pour sélectionner
  • set 1 1 : défini une echelle de sélection . le premier 1 est le départ, le 2eme 1 est l'arrivée.

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 :

  • Récupérer l'index de la ligne cliquée.
  • Effacer la ligne cliquée
  • Insérer une ligne dans l'index récupéré avec la nouvelle ligne.

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

 

 

 

 

 

 

 

 

 

 

Retour au sommaire bibliothèque TK