错误无法读取 "filename":没有这样的变量

Error can't read "filename" : no such variable

我想创建一个函数来将最近打开的文件添加到菜单和命令(事件)以在单击时打开它,但是出现错误

错误:

Error can't read "filename" : no such variable

代码:

proc add_Recentfiles {filename} {
 global recentFiles
 ...
 $m insert $recentFiles(index) \
       command -label $labelText -command {fileOpen $filename}
 ...
}

proc fileOpen { filename } {
    #refresh textbox
    .textarea.txt delete 0.0 end

    set fileid [open $filename r]
    set data [read $fileid]

    .textarea.txt insert end $data
    .textarea.l  configure -text $filename

    addRecentFile $filename 

    close $fileid

}

看来您延迟对变量的评估时间太长了。而不是

... - command {fileOpen $filename} 

尝试

... - command [list fileOpen $filename] 

当您使用 {braces} 时,所有变量替换都被禁止,因此该命令变为文字字符串 fileOpen $filename 然后稍后您将尝试打开一个名为“$filename”的文件。

使用 [list fileOpen $filename],您允许扩展变量,但还要确保,即使文件名包含空格,您也将恰好将一个参数传递给 fileOpen 过程。