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.
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.
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
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.
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 :
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 :
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.
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 :
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 :
Tixmeter ou progress bar evoluee
le tixMeter est une progressbar ou scale avec laquelle vous pouvez :
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.
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