2016-08-02 6 views
0

Die tcl Routine einen Dateinamen zu erhalten (für Open) ist tk_getOpenFile. Die Festlegung der zulässigen Suffixe ist wie folgt:variable Dateitypen in tk_getOpenFile

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

die Tiff Ersetzen ... .NEF Liste mit Variablennamen Ergebnisse in der nicht erweiterten Variablennamen. Ich würde diese Suffixliste in der Prozedur lieber nicht fest codieren. Gibt es eine Möglichkeit, eine Variable zu verwenden, um die Liste der Suffixe (Suffixi) anzugeben?

Antwort

1

Sie können es wie folgt tun:

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

eine Variable in der Liste zu verwenden, können Sie keine Klammern verwenden, um die Liste zu begrenzen. Wenn Sie stattdessen list verwenden und die Ergebnisliste Element für Element erstellen, funktioniert es.

Dokumentation: lappend, list, set

+0

Sorry, mein Englisch ist heute Abend schlimmer als je zuvor. Hoffentlich ist es sowieso verständlich. –

+0

Meine Beherrschung der Erstellung von Listen ist mangelhaft, weil meine Versuche von der "Datei öffnen" -Routine abgelehnt wurden. Aber es ist nützlich zu wissen, dass man keine Klammern verwenden sollte, um Listen zu erstellen - ich nehme an, Sie meinen, wenn sie eine Variable enthalten, die erweitert werden sollte. Danke für die Antwort- Peter –

0

Alternativ können Sie subst Befehl verwenden, um eine Variable mit seinem Wert innerhalb der geschweiften Klammern zu ersetzen.

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

Ahah! 'subst' war der Befehl, den ich suchte, der eine Liste auspackt. Die subst Handbuch Seite hat ein sehr schönes Beispiel: ‚% eine 44 % set b gesetzt {xyz {$ a}} xyz {$ a} % set b [subst {xyz {$ a}}] xyz {44} 'Vielen Dank - Peter –

1

Es ist nur eine Liste von Elementen. Jedes der Elemente ist selbst eine Liste, wobei das erste Element der Typname und das zweite die Liste der Erweiterungen ist. (Es gibt ein drittes Element möglich drin, aber wahrscheinlich klassische MacOS nicht unterstützen, so dass Sie es ignorieren.) Als solches Sie die Listen erstellen können Tcl-Befehle verwendet wird; der list Befehl ist hier nützlich, da lappend ist.

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

tk_getOpenFile -filetypes $ftlist 

Es ist nur gewöhnlicher Code. Sie haben gerade ein Listenliteral betrachtet, das aus Gründen der Lesbarkeit zufälligerweise Zeilenumbrüche für einige seiner Leerzeichen verwendet hat.

+0

Das funktioniert ein Vergnügen. Ich bin interessiert, dass Sie 'limpend tiffTypes .NEF' tun können. Ich habe immer ‚gesetzt tiffTypes [lappend tiffTypes .NEF] durchgeführt, die mehr Typisierung und weniger klar. Danke für die Hilfe. Peter –

Verwandte Themen