2016-08-02 1 views
0

La routine tcl pour obtenir un nom de fichier (pour open) est tk_getOpenFile. La spécification des suffixes admissibles est comme ceci:types de fichiers variables dans tk_getOpenFile

set fileTypes { 
      {"Image Files" { .tiff .TIFF .cr2 .CR2 .nef .NEF }} 
      {"All files" {*} } 
      } 

Remplacement de la .tiff ... liste .NEF avec les résultats de nom de variable dans le nom de la variable non élargie. Je préfère ne pas coder en dur cette liste de suffixes dans la procédure. Est-il possible d'utiliser une variable pour spécifier la liste des suffixes (suffixi)?

Répondre

1

Vous pouvez le faire comme ceci:

set imgFT { .tiff .TIFF .cr2 .CR2 .nef .NEF } 
set fileTypes {} 
lappend fileTypes [list "Image Files" $imgFT] 
lappend fileTypes {"All files" {*}} 

Pour utiliser une variable dans la liste, vous ne pouvez pas utiliser des accolades pour délimiter la liste. Si vous utilisez à la place list et créez la liste de résultats article par article, cela fonctionnera.

Documentation: lappend, list, set

+0

Désolé, mon anglais est pire que jamais ce soir. J'espère que c'est compréhensible de toute façon. –

+0

Ma maîtrise des listes de construction est déficiente car mes tentatives ont été rejetées par la routine 'file open'. Mais il est utile de savoir qu'il ne faut pas utiliser d'accolades pour construire des listes - je suppose que vous voulez dire, quand elles contiennent une variable qui devrait être développée. Merci d'avoir répondu - Peter –

0

En variante, on peut utiliser la commande subst de substituer une variable à sa valeur à l'intérieur des accolades.

set imgFT { .tiff .TIFF .cr2 .CR2 .nef .NEF } 
set fileTypes [subst { 
     {"Image Files" {$imgFT}} 
     {"All files" {*} } 
    }] 
+0

Ahah! 'subst' était la commande que je cherchais, qui déballe une liste. La page de manuel subst a un très bel exemple: '% set a 44 % set b {xyz {$ a}} xyz {$ a} % set b [subst {xyz {$ a}}] xyz {44} 'Merci beaucoup - Peter –

1

C'est juste une liste d'éléments. Chacun des éléments est lui-même une liste où le premier élément est le nom du type et le second est la liste des extensions. (Il y a un troisième élément possible là-dedans, mais vous ne supportez probablement pas MacOS classique pour que vous puissiez l'ignorer.) En tant que tel, vous pouvez construire les listes en utilisant les commandes Tcl; la commande list est utile ici, tout comme lappend.

set tiffTypes {.tif .tiff} 
lappend tiffTypes .NEF ; # etc. 
set ftlist [list [list "TIFF files" $tiffTypes] {"All files" *}] 

tk_getOpenFile -filetypes $ftlist 

C'est juste du code ordinaire. Vous venez de regarder un littéral de liste qui est arrivé à utiliser des retours à la ligne pour certains de ses espaces pour des raisons de lisibilité.

+0

Cela fonctionne un régal. Je suis intéressé que vous pouvez faire 'lappend tiffTypes .NEF'. J'ai toujours fait 'set tiffTypes [lappend tiffTypes .NEF] qui est plus typé et moins clair. Merci pour l'aide. Peter –