关于 Tk
现在,我们要进入 Tcl 的图形领域 - Tk。如果咱们曾经尝试过用 C++ 编写图形程序,那么当看到用 Tk 制作图形程序是如此简单时,咱们一定会愤怒地尖叫起来。咱们会为自己以前没有发现这种语言而感到非常生气。以及发出了警告。
现在我们回到一开始所给出的 Hello World
程序。
#!/usr/bin/env -S wish -encoding utf-8
#Make a label "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
。
现在,咱们进一步了解各个小工具......