tk_getOpenFile中的变量文件类型

时间:2016-08-02 16:42:04

标签: tcl file-type

获取文件名(用于打开)的tcl例程是tk_getOpenFile。允许后缀的规范如下:

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

用变量名替换.tiff ... .NEF列表会导致未展开的变量名。我不想在程序中硬编码这个后缀列表。有没有办法使用变量来指定后缀列表(suffixi)?

3 个答案:

答案 0 :(得分:1)

你可以这样做:

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

要在列表中使用变量,您不能使用大括号来分隔列表。如果您改为使用list并逐项构建结果列表,它将起作用。

文档: lappendlistset

答案 1 :(得分:1)

这只是一个元素列表。每个元素本身都是一个列表,其中第一个元素是类型名称,第二个元素是扩展名列表。 (那里有第三个元素,但你可能不支持经典的MacOS,所以你可以忽略它。)因此,你可以使用Tcl命令构建列表; list命令在此处很有用,lappend也是如此。

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

tk_getOpenFile -filetypes $ftlist

这只是普通代码。您刚刚查看了一个列表文字,由于可读性原因,它恰好在某些空格中使用了换行符。

答案 2 :(得分:0)

或者,您可以使用subst命令将变量的值替换为曲线括号内。

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