Historique de TCLTK.TrucsEtAstuces
Cacher les modifications mineures - Affichage du code
Installation de Tcl/tK à partir des sources
Installation de Tcl/tK à partir des sources (Compiler Tcl/tk sur linux)
Installation de Tcl/tK à partir des sources
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
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 ...?
Télécharger les tclkit
Les binaires pour linux et windows sont disponibles ici : http://www.patthoyts.tk/tclkit/tclkit.html
...
[Note] si vous obtenez cette erreur :
[Note] si vous obtenez cette erreur :
[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
[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
[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
[Note] si vous obtenz cette erreur :
[Note] si vous obtenez cette erreur :
/!\ Sur certains systèmes unix, la première ligne est limitée à 30 carctères.
/!\ Sur certains systèmes unix, la première ligne est limitée à 30 caractères.
[Note] si vous obtenz 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.
gestion des messages retournés par les programmes exécutés par exec
Gestion des messages retournés par les programmes exécutés par exec
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
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 :
!#/usr/bin/wish lance l'interpréteur donc mettre le chemin complet.
!#/usr/bin/wish lance l'interpréteur donc mettre le chemin complet.
#la prochaine ligne démarre utilisant \
#la prochaine ligne démarre utilisant \
!#/usr/bin/wish lance l'interpréteur donc mettre le chemin complet.
!#/usr/bin/wish lance l'interpréteur donc mettre le chemin complet.
- soit on lance l'interpréteur wish (ou tclsh) en écrivant comme première ligne :
- soit on lance l'interpréteur wish (ou tclsh) en écrivant comme première ligne :
- soit on lance l'interpréteur par le biais de l'application d'interprétation d'instructions (shell), sh :
- soit on lance l'interpréteur par le biais de l'application d'interprétation d'instructions (shell), sh :
- dernière possibilité, écrire en première ligne :
- dernière possibilité, écrire en première ligne :
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 2 possibilités
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
#/usr/bin/wish lance l'interpréteur donc mettre le chemin complet.
!#/usr/bin/wish lance l'interpréteur donc mettre le chemin complet.
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 2 possibilités
- soit on lance l'interpréteur wish (ou tclsh) en écrivant comme première ligne :
#!/usr/bin/wish
- 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" "$@"
#/usr/bin/wish lance l'interpréteur donc mettre le chemin complet.
/!\ ne pas oublier \ à la fin de la seconde ligne /!\ Sur certains systèmes unix, la première ligne est limitée à 30 carctères.
- dernière possibilité, écrire en première ligne :
#!/usr/bin/env tclsh
gestion des messages retournée par les programmes executés par exec
gestion des messages retournés par les programmes exécutés par exec
gestion des messages retournée par les programmes executé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]
Connaître le nom de la police utilisée par TK : fon configure TkDefaultFont -family
Connaître le nom de la police utilisée par TK : font configure TkDefaultFont -family
Connaître le nom de la police utilisée par TK : fon configure TkDefaultFont -family
- linux est sensible à la casse.
State :
State :
Style :
Style :
style element names
permet de lister les éléments d'un thème
Layout : fonction qui ppermet de définir la disposition des éléments
state : définit les état d'un élément
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
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...
style element names
permet de lister les éléments d'un thème
Layout : fonction qui ppermet de définir la disposition des éléments
state : définit les état d'un élément
...
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
...
- les polices sont définies par défaut selon l'os. Il faut donc réajuster leur taille ou les redéfinir...
- gestion de l'icône de l'application qui apparat en haut à gauche dans la fenêtre
- gestion de l'icône de l'application qui apparaît en haut à gauche dans la fenêtre
Affecter un double clic à un widget tk :
Affecter un double clic à un widget tk :
Affecter un double clic à un widget tk :
bind . <Double-1> {
puts "hi from (y)"
}
- gestion de l'icône de l'application qui apparat en haut à gauche dans la fenêtre
font create tkconfixed -size [font configure $sfont -size] -family [font configure $sfont -family]
font create tkconfixed -size [font configure $sfont -size] -family [font configure $sfont -family]
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
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)]} { ...