【发布时间】:2023-04-08 11:11:01
【问题描述】:
我刚开始学习 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。
我似乎找不到两个答案..
【问题讨论】:
-
在 proc 之外设置/初始化
n。在 proc 中使用incr ::n来增加值。::n是一个全局变量。 -
用于将数组发送到另一个 proc 使用
array get&array set -
或者传递变量名并使用
upvar -
没有人提到
incr n而不是set n [expr $n + 1]。在 Tcl 中支持 expr 的第一个参数也是一种很好的做法:set n [expr {$n + 1}]
标签: tcl