Tcl/Tk 绝对简单的 Hello World 示例失败 - 无效的命令名称 "button"

Tcl/Tk absolutely simple Hello World example fails - invalid command name "button"

我试图在 wiki Tcl lang page 上关注 tutorials/code-snippets。

#! /usr/local/bin/wish
button .hello -text "Hello, World!" -command { exit }
pack .hello

它给出了以下错误:

$ tclsh hello_world.tcl
invalid command name "button"
while executing
"button .hello -text "Hello, World!" -command { exit }"
(file "hello_world.tcl" line 4)


然后按 重试,我得到这个:

这不是我想要的。

我只想要一个带有 "Hello World" 的简单按钮,单击该按钮将关闭在执行 script/command.

时启动的 window

谷歌搜索术语 "Load Tk in Tcl" 或类似的东西没有任何帮助。

如何在这两种情况下得到一个有效的例子?

需要先加载Tk,即:

#! /usr/local/bin/wish
package require Tk      ;# This line

button .hello -text "Hello, World!" -command { exit }
pack .hello

看起来 Tcl 文件已被 tclsh 配置为 运行(默认情况下不加载 Tk 包)而不是 wish(加载 Tk)。最简单的修复方法是在脚本的开头显式加载它:

package require Tk

在所有情况下;然后你要么让事情按你预期的那样工作,要么你会得到一个明显的失败,说 Tk 无法加载(而不是一个更神秘的消息,说没有 button 命令)。


规范地,推荐的方法是:

#! /usr/bin/env wish

package require Tk

button .hello -text "Hello, World!" -command { exit }
pack .hello

因为这允许在路径上找到 wish 而不是 hard-coded 到特定位置。