Я только начал изучать Tcl. Я хотел написать простую процедуру. Когда процедура начинается, открывается окно просмотра для поиска файлов. Там вы можете выбрать файл, который хотите открыть.Tcl увеличение значения в процедуре
Затем появляется всплывающее окно и спрашивает, хотите ли вы выбрать другой файл. Каждый выбранный файл должен перейти в массив.
Я должен следующий код:
########## Defining the sub procedures ############
proc open_file {} {
set n 0
set title "Select a file"
set types {
{{GDS files} {.gds} }
{{All Files} * }
}
set filename [tk_getOpenFile -filetypes $types -title $title]
set opendFiles($n) $filename
set n [expr $n + 1]
set answer [tk_messageBox -message "Load another GDS file?" -type yesno -icon question]
if {$answer == yes } {
open_file
} else {
show_files ($opendFiles)
}
}
proc show_files {} {
foreach key [array names opendFiles] {
puts $opendFiles($key)
}
}
########## Main Program ###########
open_file
меня возникают следующие проблемы. Потому что я всегда вспоминаю proc 'open_file
' переменная $n
сохраняет значение 0
. Но я не знаю, как вспомнить открытие окна, не обращая внимания на всю подпрограмму.
Вторая проблема заключается в отправке массива в следующую процедуру. Когда я отправляю в proc 'show_files
', я всегда получаю следующую ошибку: can't read "opendFiles": variable is array
.
Я не могу найти как ответы ..
set/init 'n' вне proc. в proc используйте 'incr :: n', чтобы увеличить значение. ':: n' - глобальная переменная. – alexvetter
для отправки массива в другой proc используйте 'array get' &' array set' – alexvetter
или передайте имя переменной и используйте 'upvar' –