2016-08-02 57 views
0

獲取文件名(用於打開)的tcl例程是tk_getOpenFile。允許的後綴的規格是這樣的:tk_getOpenFile中的變量文件類型

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

更換.TIFF ... .NEF名單在未膨脹的變量名變量名的結果。我寧願不在程序中硬編碼這個後綴列表。有沒有辦法使用變量來指定後綴列表(suffixi)?

回答

1

你可以這樣說:

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

要在列表中使用變量,則不能使用大括號來分隔列表。如果您改爲使用list並逐項建立結果列表,它將起作用。

文檔: lappendlistset

+0

對不起,今天晚上我的英語比以往更糟。無論如何,希望這是可以理解的。 –

+0

我對構建列表的掌握是有缺陷的,因爲我的嘗試被「文件打開」例程拒絕。但是知道不應該使用大括號來建立列表是有用的 - 我假設你的意思是,當它們包含一個應該擴展的變量時。謝謝你的回答 - 彼得 –

0

備選地,可以使用subst命令與它的值來代替彎曲的括號中的變量。

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

啊哈! 'subst'是我一直在尋找的命令,解開一個列表。分子手冊頁有一個很好的例子:'%set a 44 %set b {xyz {$ a}} xyz {$ a} %set b [subst {xyz {$ a}}] xyz {44}'非常感謝 - 彼得 –

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 

這只是普通的代碼。出於可讀性的原因,您剛剛查看了一個列表文字,該列表文字恰好爲其空白部分使用換行符。

+0

這是一種享受。我很感興趣,你可以做'lappend tiffTypes .NEF'。我總是完成'設置tiffTypes [lappend tiffTypes .NEF],這是更加打字和不太清晰。謝謝您的幫助。彼得 –