Une question ...

 

Cette page est faite pour poser des questions sur Tcl/Tk, et pour obtenir des réponses rapides.

Vous pouvez également poser vos questions sur le forum fr.comp.lang.tcl : [1]

Ecrivez vos questions au dessous du "----" suivant (pour ainsi avoir les questions les plus récentes en haut de page).


QUESTIONS


CK 14 avril 2008 En ce qui a trait à l'intégration d'un programme en C avec une interface en Tcl, j'ai remarqué que Tcl pouvait très bien exécuter un programme en C. Les deux seuls problèmes apparemment sont les suivants:

1) Les printf du programme en C n'apparaissent pas à l'écran

2) L'interactivité usager/ordi du programme en C n'existe plus. On ne peut donc répondre aux questions en tapant sur une lettre ou en entrant du texte.

Comment régler ces deux problèmes?

Excusez ma très grande ignorance mais je débute en Tcl-Tk et j'ai quelques connaissances de C. Sans plus.

Joyeux printemps à tous et merci!


CK 14 avril 2008

Le chat jabber des utilisateurs tcl anglophones semble très bien fonctionner. Il ne prend que 2 megs sur Windows XP. Ce serait bien de placer un chat français Tcl sur ce site. Inutile de le traduire; on le prendrait tel quel et on taperait en français; donc sans se casser la tête pour tout mettre en français. Est-ce une bonne idée?

Kroc - Il y avait un chat en français par le passé, mais il a fermé faute de participants.


ulis 2007-09-16. Quelqu'un pourrait m'expliquer comment marche le presse-papier sous Tk, et comment l'utiliser de façon multi-plateforme ? (je n'arrive pas à comprendre la page http://wiki.tcl.tk/1217 du Tcler's Wiki)


dMc -29 janvier 2007 - : en développant .TTC, j'arrive à sauvegarder les menus liés à un menubutton inclus dans un "text", et composés d'entrées de type "command". Mais je me heurte à une difficulté, car je ne trouve pas comment récupérer l'information sur le type d'une entrée (command, cascade, etc.). Aucune des méthodes liées à un menu que j'ai essayées ne me fournit cette information.

Y a-t-il un truc?

ulis A priori le truc c'est de lire la doc. En cherchant la description de la commande menu dans le wiki (http://wfr.tcl.tk/menu) on trouve, au milieu de la page :

" pathName type index

Retourne le type de l'entrée de menu indiquée par index. C'est l'argument type transmis à la commande add quand l'entrée a été créée, comme command ou separator, ou tearoff pour une entrée tear-off. "

Bien entendu, pathname est le nom du menu.

dMc : je suis confus et me couvre de cendre.

ulis Ah, un nouveau feu qui couve... ;-)


OCZ (23 aout 2006) : En manipulant des canvas ,j'ai decouvert un probleme auquel je ne trouve pas de solution

Soit un canves .c1 dans lequel on construit un canvas .c1.c2 et voici le coup de bambou... je veux avoir un beau fichier postscipt de ma belle image

Quel est le canvas a adresser :

                                .c1    ?????...me restitue la surface .c1
                                .c1.c2 ?????...me restitue la surface .c1.c2
                          ... et moi je voudrai {.c1+.c1.c2} postscript -file xxxx.ps

Y a t'il une solution ? une methode ? pour sortir ce fichier ???????

Ci joint un exemple simple :

   canvas .c1  -bg lightblue
    .c1 create rectangle 5 5 500 320 -width 4 -outline black
    .c1 create rectangle 20 190 60 10 -width 4 -outline white -fill red
    .c1 create text 40 300 -fill red -text "canvas .C1"
   pack .c1
   canvas .c1.c2 -relief solid  -borderwidth 4 \
                -highlightthickness 0 -bg white
    .c1.c2 create rectangle 100 60 180 10 -width 1 -outline white -fill blue
    .c1.c2 create text 200 200 -fill blue -text "canvas .C1.C2"
    pack .c1.c2 -side top -padx {80 20} -pady {10 30}
   update idletasks
   .c1 postscript -file essai.ps -pagewidth 400
   #.c1.c2 postscript -file essai.ps -pagewidth 400

Kroc (23 Août 2006) : la solution consiste à rajouter .c2 à .c1 comme un élément de type window au lieu d'utiliser pack :

 .c1 create window $x $y -window .c1.c2 ; # avec $x et $y les coordonnées que tu souhaites

OCZ : merci ,c'est effectivement la solution ,sauf qu'il faut que $x et $y soit equivalent a padx et pady de pack .c1.c2 et que le champ du canvas .c1 soit defini

le programme devient:

   canvas .c1  -bg lightblue -width 504 -height 324
    .c1 create rectangle 5 5 500 320 -width 4 -outline black
    .c1 create rectangle 20 190 60 10 -width 4 -outline white -fill red
    .c1 create text 40 300 -fill red -text "canvas .C1"
   pack .c1
   canvas .c1.c2 -relief solid  -borderwidth 4 \
                -highlightthickness 0 -bg white
    .c1.c2 create rectangle 100 60 180 10 -width 1 -outline white -fill blue
    .c1.c2 create text 200 200 -fill blue -text "canvas .C1.C2"
   .c1 create window 80 10 -anchor nw -window .c1.c2
   update idletasks
   .c1 postscript -file essai.ps -pagewidth 400

Question : exec ne prend pas les arguments s'ils ne sont pas précédés du caractère "-" et interprete un espace comme la fin de l'argument.

donc comment faire pour lancer une commande d'encodage openssl qui commence forcément par

 openssl enc -cast5 [+ options]

ou par

 openssl cast5 [+ options]

?

Si je fais:

 set openssl_command "openssl enc -cast5 -e -k monpassword"
 set donnee_a_crypter "une phrase"
 set resultat [exec echo $donnee_a_crypter $openssl_command]

Tcl me répond qu'il ne trouve pas le fichier...

Réponse : j'ai trouvé. Voici la syntaxe qui fonctionne sous TCL:

 # BUT: décrypter une donnée codée $crypted_data avec openssl
 # Ce qui correspond à lancer la commande suivante sur le shell bash:
 #    echo -n <votre_donnee_a_decrypter> | openssl cast5 -salt -d -A -a -k <mot_de_passe_pour_decrypter>
 # on suppose ici que $cipher_password et $crypted_data ont été initialisées précédemment

 set cipher_name "cast5"
 set cipher_salt "-salt"

 if { [catch {set user_password [exec echo  "-n" "$crypted_data" | "openssl" "$cipher_name" "$cipher_salt" "-d" "-A" "-a" "-k" "$cipher_password"] } ] } {
     send_user "\nDésolé, mauvais mot de passe\n\n"
     exit
 }

Kroc : ton affirmation de départ est fausse : exec ne considère pas les espaces comme la fin de commande et accepte les tirets, c'est la syntaxe que tu utilises qui n'est pas bonne. Il faut faire comme ça :

 set openssl_command "openssl enc -cast5 -e -k monpassword"
 set donnee_a_crypter "une phrase"
 catch "eval exec echo $donnee_a_crypter | $openssl_command" resultat

dMc : Existe-t-il un package pour sauvegarder le contenu d'un text au format RTF ?

Je n'ai rien trouvé sur ce wiki ni sur son cousin anglophone.

Mickaël K : RATFINK [2] a l'air de correspondre à ce que tu veux ...


Les anciennes questions / réponses sont régulièrement déplacées dans la page des Questions résolues.