获取文件名(用于打开)的tcl例程是tk_getOpenFile。允许后缀的规范如下:
set fileTypes {
{"Image Files" { .tiff .TIFF .cr2 .CR2 .nef .NEF }}
{"All files" {*} }
}
用变量名替换.tiff ... .NEF列表会导致未展开的变量名。我不想在程序中硬编码这个后缀列表。有没有办法使用变量来指定后缀列表(suffixi)?
答案 0 :(得分:1)
你可以这样做:
set imgFT { .tiff .TIFF .cr2 .CR2 .nef .NEF }
set fileTypes {}
lappend fileTypes [list "Image Files" $imgFT]
lappend fileTypes {"All files" {*}}
要在列表中使用变量,您不能使用大括号来分隔列表。如果您改为使用list
并逐项构建结果列表,它将起作用。
答案 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" {*} }
}]