Tcl 错误可能是';“我不读”;文件名";:没有这样的变量
我希望创建一个函数,将最近打开的文件添加到菜单中,并在单击时命令(事件)将其打开,但出现错误 错误:Tcl 错误可能是';“我不读”;文件名";:没有这样的变量,tcl,tk,Tcl,Tk,我希望创建一个函数,将最近打开的文件添加到菜单中,并在单击时命令(事件)将其打开,但出现错误 错误: Error can't read "filename" : no such variable proc add_Recentfiles {filename} { global recentFiles ... $m insert $recentFiles(index) \ command -label $labelText -command {fileOpen $filena
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
}
代码:
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}
试一试
当您使用{brages}
时,所有变量替换都将被抑制,因此该命令将成为文本字符串fileOpen$filename
,然后您将尝试打开一个名为“$filename”的文件
使用
[list fileOpen$filename]
,您可以扩展变量,但也可以确保即使文件名包含空格,您也将只向fileOpen进程传递一个参数。谢谢,您能解释一下为什么需要[list..]使其工作吗?嗯,不完全是这样,对吗?命令是在全局范围内计算的,因此第一种情况下的问题是没有这样的全局变量。如果存在,将使用其值。在第二种情况下,命令调用已经替换了变量,因此它只是在全局范围内按原样执行。