Tcl/Tk: "bad window path name" 当它不是 window 路径时

Tcl/Tk: "bad window path name" when it is not a window path

我有没有使用 Tk 的脚本。当我添加 Tk 时,一行被视为 window 的路径,我不明白为什么。

错误信息如下: bad window path name "* Log directory: D:/tests/log/2016_10_13_17_30_29"

就是执行这行的时候:

message "* Log directory: ${dirname}"

dirname 解析为目录路径,例如:

D:/tests/log/2016_10_13_17_30_29

message 是一个简单的记录到文件的过程:

proc message {text} {
    global test_log_filename
    puts -nonewline $test_log_filename "[timestamp]         "
    puts $test_log_filename $text
}

当我不使用 Tk 时它工作正常。据我了解,它采用 message 过程参数作为 Tk window 的路径,但我不知道为什么。这样的window当然不存在

我还尝试调用 message test 之类的东西来确认这是参数问题。它给出错误 bad window path name "test"

你能帮忙吗?

Tk also 定义了一个名为 message 的命令(它是一个类似于 label 的小部件,但使用了稍微不同的自动换行算法;它是不推荐用于新代码)并且出于某种原因,它胜出。虽然您可能会通过在 package require Tk 之后直接 sourceing 您的代码来强制使用您的代码,但这不太可能是一个好主意,因为您可能会发现一些其他代码因此而中断。 (我不记得它目前是否在标准对话框中使用,但这是可能出错的事情。)

最简单的方法是更改​​日志程序的名称。也许到 Message(大写字母)。这应该不会花很长时间,因为它实际上只不过是全球搜索和替换。