2016-08-02 2 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 и создадите элемент списка результатов по позиции, он будет работать.

Документация: lappend, list, set

+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». Я всегда делал «set tiffTypes [lappend tiffTypes .NEF], который более типизирован и менее ясен. Спасибо за помощь. Питер –