你好世界

Hello World

让我们像其他教程一样,从 Hello World 程序开始。创建一个名为 Hello.tcl 的文件,并输入以下内容。

#!/usr/bin/env wish
# 构造出一个 "Hello World" 的标签

label .hello -text "Hello World"
pack .hello

第一行 -- #!/usr/bin/env wish 在 windows 中是不需要的。在 Linux 中,他告知的是脚本语言处理器的名称。不明白这是什么意思?不用担心。把他放在文件顶端就可以了。但如果咱们打算制作一个良好可移植的脚本,就不要使用这一行。请使用下面这一行。

#!/bin/sh
#The next line executes wish - wherever it is \
exec wish "$0" "$@"

为什么?原因请参见 Unix 中的 Tcl/Tk

注意:这种写法在 Ubuntu 20.04 上,会报出如下错误:

lenny.peng@sta-fpga-b:~/tk_demos$ ./hello_world.tcl
Error in startup script: can't read "0": no such variable
    while executing
"exec wish "$0" "$@""
    (file "./hello_world.tcl" line 4)

更好的写法,应是:#!/usr/bin/env wish

第二行 -- 这是一条注释。任何以 # 字符开头的行,都是注释。注释在程序中没有任何作用。他是程序员用来自言自语的。程序员不可能记住脚本所做的每一件事。因此他便使用注释将其写下来。下次编辑脚本时,他便可以阅读注释,了解程序的用途。尽可能多地编写注释,是一种很好的做法。

第三行 -- label .hello -text "Hello World",创建了一个标签,并在其中写入 "Hello world"。咱们可以将文本,改成任何咱们喜欢的内容。请注意该命令的结构:

  • label -- 小部件,the widget,的名称。小部件是 X 图形用户界面中,一个用户界面对象。不明白吗?不明白?我也是。只能说他是出现在屏幕上对象的名称。还有很多其他小部件。如果要显示一个按钮,咱们可以使用按钮部件。如果要显示文本,则使用文本部件。要显示条目,你猜对了,就是条目部件。若咱们想要,咱们就会发现更多的图形用户界面的 小部件

:小部件,widget,实际上是一个小的视窗。是视窗化桌面管理系统的组成元素。

  • .hello - 赋予给这个视窗小组件的名称。每个部件都必须有个唯一的名称。当必须要访问这个视窗部件时,将使用该名称。这就是所谓的路径;

  • -text "Hello World" - 这个视窗组件的选项。该选项表示,必须为该部件提供 "Hello World" 文本。选项会根据部件的不同而改变 -- 按钮部件不会拥有标签部件的所有选项,反之亦然。但各种不通部件之间,会有很多共同选项。咱们还可以在这里,继续编写其他选项。例如,咱们来制作一个,下面这样的显示文本 "Hell World" 的标签。其他行与 Hello World 程序相同。

label .hell -text "Hell World" -font courierfont -relief raised

在这个示例中,用到了更多选项。font 字体选项,用于说明必须使用哪种字体来制作文字,relief 选项则用于说明文字应显示为凸起、凹陷还是扁平的等等。要了解特定小部件的所有选项,请阅读 Tcl 随附的手册。手册中列出了各个部件及其选项。如果咱们打算用 Tcl 编程,就会发现自己每隔几分钟,就会翻看一下手册。那里列出了最重要、最常用的选项。

这样,咱们便有了小部件命令的最终语法。

<NameOfWidget> <path> ?<option 1> <option 2> ...?

第四行 -- pack .hello - 这一行告诉咱们,如何打包这个小部件。这一行请求解释器,打包名为 .hello 的部件。解释器比一般孩子都听话,他照做了。现在,pack 是个几何管理器,a geometry manager。另一个几何管理器是 grid。我个人更喜欢 grid

现在,Tcl 的清教徒们,Tcl puritans,会大声疾呼,说这不是打印 "Hello World" 的方法。“纯粹” 方法如下......

#!/usr/bin/env tclsh
#Print "Hello World"
puts "Hello World"

注意:这里的第一行,原本也是 #!/usr/bin/tclsh,为更加正式,修改为了 #!/usr/bin/env tclsh

客观地讲,这里是在教 Tcl/Tk,而不是 Tcl。以上是 Tcl 的操作方法。这里是 Tcl/Tk 的方法。我(作者)知道,正在阅读本教程的人会大叫:“等一下,你是说 Tcl 和 Tk 是两种不同的语言?!!”

现在,Tk 本身,并不是一种语言 -- 怎么说呢,他是 Tcl 的附加组件,an add-on to Tcl。创建 Tk 的目的,是为某些应用程序提供图形工具包,a graphical ToolKit。然而 Tcl 本身,则是一门完整的语言。如果咱们说 Tcl 与 Tcl/Tk,是两种不同的语言,那就大错特错了。

上述脚本是在 UNIX 环境下,使用 Tcl 打印 "Hello World" 的方法。在 Windows 中,如果使用 wish 执行该脚本,则什么也看不到。

注意:实际上,使用 Windows 上的 wish 执行该脚本,是可以打开一个窗口,并显示出那个标签的。

Last change: 2023-10-25, commit: f31343b