GDeLTK

TCL/TK

Notepad++

Wine

Linux

XML

FOP

Guitare

Voyages?

Citations

Reste à faire

edit SideBar


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?
Charge le paquetage identifié par nom. Si -exact est présent, il faut fournir précisément la version demandée. Si -exact est absent, toute version disponible ultérieure à version sera chargée. Dans ce dernier cas, il doit y avoir correspondance avec le numéro majeur de version. Si version vaut 8.4, la version 8.5 sera acceptée, mais pas 9.0. En l’absence de version, la version la plus récente du paquetage sera chargée.
Cette commande retourne le numéro de version du paquetage chargé ; autrement, une erreur est retournée.
 package provide nom ?version?
Cette commande informe l’interpréteur Tcl que le paquetage nom est chargé. Lorsque vous créez un paquetage, c’est en l’incluant à la fin du fichier source principal que vous définirez le nom et, éventuellement, la version actuelle de votre paquet. Si vous spécifiez une version, vous devrez faire attention au fait que deux versions différentes du même paquetage ne peuvent être chargées en mémoire. Par contre, votre configuration peut disposer de plusieurs versions du même paquetage, c’est la commande package require qui déterminera la version chargée en mémoire.
 pkg_mkIndex ?-direct? ?-lazy? ?-load motif? ?-verbose? dossier ?motif motif ...?
Crée un fichier pkgIndex.tcl pour un ou plusieurs paquetages. Cette commande procède en chargeant les fichiers correspondant à motif dans le répertoire dossier, et en fichant les nouveaux paquetages apparus. Elle peut gérer des scripts Tcl comme des librairies natives (nous nous limiterons ici aux scripts Tcl).

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