2016-08-02 5 views
0

ファイル名を取得するためのtclルーチン(tk_getOpenFile)があります。未展開し、変数名に変数名の結果と.TIFF ... .NEFリストを交換tk_getOpenFileの変数ファイルタイプ

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

:許容サフィックスの仕様は、このようなものです。私はむしろ、このサフィックスリストを手続きにハードコードしたくないでしょう。接尾辞(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 % xyz {$ a} %b [subst {xyz {$ a}}] xyz {44} 'どうもありがとうございます - ピーター –

1

これは単なる要素リストです。要素のそれぞれは、それ自身が最初の要素が型名であり、2番目が拡張のリストであるリストです。 (そこには三つ目​​の要素がありますが、古典的な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'をすることができることに興味があります。私はいつも 'set tiffTypes [lappend tiffTypes .NEF]を実行しています。これは、よりタイピングとあまり明確ではありません。助けてくれてありがとう。ピーター –

関連する問題