Librairie tk › librairie TIX

TIX

La librairie TIX fait partie des depots de votre distribution linux. Elle n'est pas beaucoup connue du grand public et pourtant elle regorge de widgets tres simples a utiliser et qui viennent etoffer le nombre de widgets de la bibliotheque tk.

Installez le paquet tix qui fait environ 300Ko.

Pour l'utiliser dans vos programmes, ecrivez au tout debut de votre code source :

package require Tix

La liste des widgets est assez importantes par rapport a sa taille :

Ceux qui sont en rouge ci-dessous comportent un tutoriel pour les utiliser:

tixBalloon, bulles d'aide tixDirList,repertoires sous forme de treeview
tixFileEntry tixGetInt tixListNoteBook tixOptionMenu
tixButtonBox, boite a boutons tixDirSelectDialog tixFileSelectBox tixHList tixMeter, une progressbar scale tixPopupMenu
tixCheckList,liste treview de hierarchie tixDirTree tixFileSelectDialog, boite de selection de fichier tixInputOnly tixMwm tixScrolledHList
tixComboBox, combobox amelioree tixExFileSelectBox tixForm tixLabelEntry tixNBFrame tixScrolledListBox, une vue en icone iconview
tixControl, spinbox ameliore tixExFileSelectDialog tixGetBoolean tixLabelFrame tixNoteBook tixScrolledText
tixScrolledWindow tixSelect tixStdButtonBox tixTList tixTree tixUtils

 

Je vous propose au travers de ces quelques tutoriels de decouvrir cette librairie :

Boite de selection de fichiers tixFileSelectDialog

Dans la bibliotheque tix disponible dans les depots de votre distribution linux, il existe une boite de dialogue bien plus evolue pour selectionner un fichier qui s'appelle tixFileSelectDialog.

Nous allons decrire son fonctionnement.

a) Creation de la boite

Tout d'abord pour la creer il suffit d'ecrire ce code :

tixFileSelectDialog .gg

Pour afficher la fenetre il faut lui indiquer cette commande :

.gg popup

la boite n'a pas besoin de pack, grid ou place car c'est une toplevel (fenetre fille)

la boite s'ouvre donc et dispose des elements suivants :

en vert fonce : un filtre possible pour filtrer les fichiers
En bleu ciel : le repertoire ou chercher
en rouge : un split pour qgrqndir ou reduire la liste repertoire/fichiers
en orange : le fichier a selectionner
en bleu fonce : le fichier qui est selectionne

En bas les 4 boutons :
En vert le bouton OK qui renvoit le chemin di fichier selectionne
en violet le bouton filtrer qui qppliaue un filtre
le bouton cancel pour fermer la fenetre sans aucun action
le bouton help en marron qui lance le fichier d'aide de votre application si present.

2) recuperation du chemin de fichier

Le chemin est recupere par l'option -command

nous creons une procedure browse avec un argument nomme file comme ceci :

proc browse {file} {
puts "$file est renvoye"
}

et nous saisissons ce code :

tixFileSelectDialog .gg -command browse
.gg popup

Une remarque importante :


Ce code fonctionne tres bien mais si nous ouvrons deux fois la meme fenetre le programme plante.
La solution est de rajouter une condition 
Si la fenetre existe alors on la detruit avec ce code :

if {[ winfo exist .gg]==1} {destroy .gg}

Voici le code complet de l'exemple :

proc browse {file} {
puts "$file browsed"
}
 
button .bob -text "clic pour selectionner un fichier" -command { if {[ winfo exist .gg]==1} {destroy .gg} ; tixFileSelectDialog .gg -command browse ; .gg popup}
 pack .bob

 

SELECTEUR DE REPERTOIRE tixDirList

le TIXDIRLIST est une treeview toute prete qui vous permet d'afficher l'arborescence de votre Linux avec une scrollbar pour faire defiler la fenetre.

A) creation de la tixdirlist

tixDirList .fg -value "/" -showhidden 1 -browsecmd browse
pack .fg -fill both -expand 1

commentons le code :

Je cree une tixDirList nomme .fg avec les options suivantes :

  • -value  defini le repertoire actif de travail : Reauiert le chemim entre guillemets
  • -showhidden  affiche les fichiers cache (commencant par un point) : 2 valeurs possibles,   0 ne pas afficher, 1 les afficher
  • -browsecmd renvoi par argument le chemin clique une fois : il faut creer une procedure pour recuperer l'argument comme ci desosus :
proc browse {file} {
puts "$file browsed"
}

 Pour terminer voici le code complet de l'exemple :

tixDirList .fg -value "/" -showhidden 1 -browsecmd browse
pack .fg -fill both -expand 1

proc browse {file} {
puts "$file est recupere"
}

 

la tixCheckList

La tixCheckList est une arborescence graphique pour afficher du texte ou sous texte de facon ordonnee par des traits ou sous traits.

Vous definissez vous meme les texte a afficher. Son utilisation pourrait etre par exemple pour lister les balises imbriquees en XML ou HTML.

Voici le code exemple dans la documentation officielle qui est assez facile a comprendre :

tixHList .h -separator "/" -browsecmd browse -selectmode single \
    -itemtype text
 .h add /         -text /lala
 .h add /home     -text /homeouhouse
 .h add /home/ioi -text /home/iris
 .h add /home/foo -text /home/foot
 .h add /usr      -text /usrmate
 .h add /usr/lib  -text /usr/librairie
 pack .h

 proc browse {file} {
     puts "$file browsed"
 }

Commentons le code :

Je cree une tixHList nommee .h dont les options sont les suivantes :

  • -separator (Je ne vois pas a quoi cela peut bien servir, aucun effet)
  • -browsecmd reagit au clic de souris et envoi l'argument clef a la procedure browse
  • -selectmode definit qu'une seule ligne est selectionnee
  • -itemtype defini des lignes de texte a afficher selon le principe INDEX0 TEXTE0, INDEX1 TEXTE1,etc...

En cliquant sur une ligne ce sera bien l'index aui sera renvoye et non le texte. J'ai volontairement change le texte diffrent de la clef.

 

BULLES D'AIDE ou tixballoon

Les tixBalloon sont des petites bulles d'aide qui apparaissent lorsque vous rester longtemps dans un widget. Elles donnent ujne information sur le widget survole.

a) Creation d'une bulle d'aide

la tixBalloon est une toplevel window. elle n'a pas besoin d'etre pack grid ou place.

Attention : Comme tout widget tix, la casse majuscule minuscule est importante !!!

Dans notre exemple nous allons creer un bouton .b ,et lors de son survol par le curseur nous allons afficher une bulle d'aide " Allez l'OM"

 

Voici le code :

 button .b -text "survolez le bouton"
 pack .bob .b
tixBalloon .bal
.bal bind .b -msg "Allez l'OM"

Commentons le code :

  • Ligne 1 : Je cree un bouton .b avec le texte Survolez le bouton
  • Ligne 2 : Je pack le bouton pour l'afficher
  • Ligne 3 : Je cree une bulle d'aide nommee .bal
  • Ligne 4 : la bulle .bal lors d'un bind (evenement) sur .b declenche le message allez l'OM

Remarque : L'exemple fonctionne aussi avec Saint Etienne, Lyon ou PSG.

tixcontrol une spinbox avec un label

Le tixcontrol est tout simplement genial. Il s'agit d'une spinbox au theme retravaille avec la possibilite de mettre un label de description a cote.

Je vous ai mis l'ensemble des options usuelles a utiliser dans le code ci-dessous :

tixControl .cn -label "Saisissez une valeur:" -min 12 -max 152 -labelside top -command browse -value 13
 pack .cn
 proc browse {mavaleur} {
puts "La valeur est $mavaleur"
}

Commentons le code :

Je cree un tixControl (la casse est trs importante) dont les options sont les suivantes :

  • -label ajoute un texte a cote du spinbox : la valeur doit etre un texte entre guillements
  • -min ajuste la valeur minimal du spinbox : Doit  etre un nombre
  • -max ajuste la limite max du spinbox : Doit etre un nombre
  • -labelside indiaue ou est le label a cote du spinbox : 4 valeurs possibles : top left right bottom
  • -value defini la valeur par defaut a afficher
  • -command recupere l'argument dans une procedure,c'est a dire la valeur du spinbox dans la procedure ainsi lancee (ici nommee browse)

 

Tixmeter ou progress bar evoluee

le tixMeter est une progressbar ou scale avec laquelle vous pouvez :

  • Changer la couleur de la barre de progression.
  • Changer le texte que vous voulez

Prenons un exemple de code :

tixMeter .vv -text "80%" -value 0.8 -fillcolor yellow
pack .vv

 

tixNoteBook ou simple notebook

le tixNoteBook est un widget qui ressemble au notebook de la librairie tk.

Il semble etre plus simple d'utilisation.

Voici le code de l'exemple :

set nb [tixNoteBook .nb -options {nbframe.BackPageColor gray60}]
$nb subwidget nbframe config -font fixed

$nb add page1 -label "Tab 1"
set page [$nb subwidget page1]
$nb add page2 -label "Tab  2"
button $page.b1 -text " un bouton dans le premier onglet"
pack $page.b1

pack $nb -expand yes -fill both

 

tixFileEntry ou selecteur de fichier

Le tixFileEntry est une boite de texte avec un bouton accole aui vous permet d'ouvrir une boite evoluee de selection de fichier.

a) creation du tixFileentry

creez une tixFileEntry et packez la :

tixFileEntry .ff
pack .ff

Pour recupere le chemin utilisez l'option -command suivi d'une procedure a un argument (ici nommee browse)

une fois la fenetre ouverte vous recuperez le chemin du fichier dans une procedure sous forme d'argument.

Voici le code complet de l'exemple :

tixFileEntry .ff -command browse
pack .ff

proc browse {mavaleur} {
puts "Le fichier selectionne est $mavaleur"
}

une vue en icone iconview nommee tixScrolledTList

Ce widget vous permet d'afficher une liste d'icones avec scrollbar integree.

Voici le code de l'exemple :

package require Tix
image create photo ifolder -file "./32folder.png"
tixScrolledTList .t -options {tlist.browseCmd browse}; pack .t -expand 1 -fill both
# set red  [tixDisplayStyle imagetext -bg #FFF000]
set tlist [.t subwidget tlist]
set m [list "ordinateur" "bonjour" "Diskque 1" "Allo?" "ici" "fichier"]
foreach l $m {$tlist insert end -itemtype imagetext -image ifolder -text $l  }
# with style  : foreach l $m {$tlist insert end -itemtype imagetext -image ifolder -text $l -style $red }
button .bb -text "effacer l' icone bonjour" -command {$tlist delete 1 1}
pack .bb

proc browse {t} { puts $t; puts "event[tixEvent value]" ; # renvoi l'index de la liste de l'item clique }

la procedure browse recupere le simple clic sur une icone et renvoi son numero d'index dans la liste