Télécharger les tclkit
Les binaires pour linux et windows sont disponibles ici : http://www.patthoyts.tk/tclkit/tclkit.html
Démarrer des programmes tcl sous linux
La ou les premières lignes du script tcl devront comporter l'interpréteur qui va traduire en langage machine les lignes de commandes écrites. Il y a 3 possibilités :
- soit on lance l'interpréteur wish (ou tclsh) en écrivant comme première ligne :
#!/usr/bin/wish
!#/usr/bin/wish lance l'interpréteur donc mettre le chemin complet.
- soit on lance l'interpréteur par le biais de l'application d'interprétation d'instructions (shell), sh :
#!bin/sh #la prochaine ligne démarre utilisant \ exec wish "$0" "$@"
/!\ ne pas oublier \ à la fin de la seconde ligne
/!\ Sur certains systèmes unix, la première ligne est limitée à 30 caractères.
- dernière possibilité, écrire en première ligne :
#!/usr/bin/env tclsh
[Note] si vous obtenez cette erreur :
bash: ./clock : /bin/sh^M : mauvais interpréteur: Aucun fichier ou dossier de ce type
Il faut convertir le fichier tcl au format unix.
[Note] Pour que l'exécution du programme tcl soit automatique, supprimer l'extension .tcl dans le nom du fichier et attribuer au fichier des droits d'exécution
Gestion des messages retournés par les programmes exécutés par exec
If you want the stderr of the program to go directly to the user:
exec ... 2>@ stderr
If you also want the same to happen to stdout (and be routed to Tcl's stdout):
exec ... 2>@ stderr >@ stdout
Though of course in this case you won't get the program's output back in [exec]'s result. But sometimes that's OK.
Dupliquer un array
array set argumentscopy [array get arguments]
Quelques notions sur tile
Tile est un moteur de thème qui permet non seulement aux applications graphiques d'avoir la même apparence que celle du système d'exploitations depuis lesquelles elles sont lancées mais aussi de changer de thème.
Un thème s'applique à une collection d'éléments. Un élément est un "morceau" d'un widget : uparrow, Row, combobox.uparrow...
La commande style element names
permet de lister les éléments d'un thème
Layout :
fonction qui permet de définir la disposition des éléments
State :
définit les états d'un élément. disabled, normal focus pressed, selected...
Style :
Un style est affecté à chaque élément.
Il est possible de définir des styles dynamiques avec style map
et des styles par défaut avec style configure
La commande style lookup
retourne le style d'un élémént
...
Polices utilisées par Tk
la commande font names
retourne la liste des polices utiliées par Tk
Tkdefaultfont est utilisée par tile style lookup default -font
TkTextFont est utilisée par tablelist
Connaître le nom de la police utilisée par TK : font configure TkDefaultFont -family
Personnaliser la police de tkcon 2.5 sous linux
Depuis la version 8.5 de TCL/TK, les polices sont lissées, ce qui a pour conséquence malheureuse que la taille de la police de tkcon est trop petite pour mes petits yeux.
Pour y remédier, j'ai édité le fichier tkon puis je suis rendu dans la procedure proc ::tkcon::AtSource
et j'ai ajouté ces lignes :
... set PRIV(SCRIPT) [info script] #<!-- HL : configuration de la police. Démarrage ajout des lignes set sfont [font create -family "Arial" -size "10"] font create tkconfixed -size [font configure $sfont -size] -family [font configure $sfont -family] font create tkconfixedbold -size [font configure $sfont -size] -family [font configure $sfont -family] -weight bold # fin ajout--> if {!$PRIV(WWW) && [string length $PRIV(SCRIPT)]} { ...
Programmation sur linux et windows :
- les chemins sont créés avec la commande [file join ...]
- la police utilisée dans tk doit être standard dans les 2 os : par exemple, ne pas utiliser la police tahoma qui est uniquement disponible sur windows
- le séparateur de classpath pour l'application java est : sur linux et ; sur windows
- utiliser la variable ::env pour récupérer les chemins home...
- les url qui pointent sur les fichiers doivent être distinguées : file:///c:/ pour windows et / pour linux
- gestion de l'icône de l'application qui apparaît en haut à gauche dans la fenêtre
- les polices sont définies par défaut selon l'os. Il faut donc réajuster leur taille ou les redéfinir...
- linux est sensible à la casse.
Affecter un double clic à un widget tk :
bind . <Double-1> {
puts "hi from (y)"
}
Création d’un paquetage
Cette opération doit se faire en trois étapes :
- Ajouter la commande package provide à votre script.
- Fabriquer un fichier pkgIndex.tcl.
- Installer le paquetage dans un répertoire où Tcl recherche ses paquetages.
Ajouter la commande package provide à votre script est aisé ; il est recommandé de la placer en début de fichier, où elle sera facile à identifier. Vous devrez lui fournir deux arguments : le nom et la version du paquetage. Un numéro de version comporte des entiers séparés entre eux par des points : par exemple 0.1, 1.3, 2.1.0, etc…
Pour fabriquer un fichier pkgIndex.tcl, le moyen le plus simple est la commande pkg_mkIndex. Cette dernière recherche les fichiers scripts Tcl contenant l’instruction package provide, et crée le fichier pkgIndex.tcl contenant une ou plusieurs instructions package ifneeded.
Le paquetage est créé, mais pour que Tcl puisse le charger en mémoire, il faut le placer dans un répertoire où il le trouvera. Les variables globales tcl_pkgPath et auto_path contenant la liste de ces répertoires, il suffit, soit de placer le paquetage dans un de ces répertoires, soit d’ajouter (à l’exécution) le répertoire où il se trouve à la variable auto_path.
package require ?-exact? nom ?version?
package provide nom ?version?
pkg_mkIndex ?-direct? ?-lazy? ?-load motif? ?-verbose? dossier ?motif motif ...?
Installation de Tcl/tK à partir des sources (Compiler Tcl/tk sur linux)
Pour tcl :
$ cd /opt/amsn_aa/ wget http://heanet.dl.sourceforge.net/sourceforge/tcl/tcl8.5.0-src.tar.gz tar xvzf tcl8.5.0-src.tar.gz cd /opt/amsn_aa/tcl8.5.0/unix ./configure --prefix=/usr/local --includedir=/usr/local/include/tcl8.5 --enable-shared --enable-threads --mandir=/usr/local/share/man --enable-man-symlinks --enable-man-compression=gzip && make CFLAGS="-g -O2 -D_REENTRANT" && make install
Pour Tk
cd /opt/amsn_aa/ wget http://switch.dl.sourceforge.net/sourceforge/tcl/tk8.5.0-src.tar.gz tar xvzf tk8.5.0-src.tar.gz cd /opt/amsn_aa/tk8.5.0/unix ./configure --prefix=/usr/local --includedir=/usr/local/include/tcl8.5 --with-tcl=/usr/local/lib --enable-shared --enable-threads --enable-man-symlinks --enable-man-compression=gzip --enable-xft && make CFLAGS="-g -O2 -D_REENTRANT" && make install