首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Tcl/Tk 快速入门 Tk 命令

Tcl/Tk 快速入门 Tk 命令

小部件Hello, World! Tk 样式Tk 是对 Tcl 的图形工具箱扩展。Tk 发行版与 Tcl 的发行版是在一起的。在接下来的几屏中,将回顾 Tk 小部件集,研究一些配置选项并设置一些示例来演示 Tk 的有用性。
很难使任何 PHB(挑剔的老板)相信本教程的这一部分是与工作相关的。毕竟,它是有关小部件的,概念上小部件与“玩耍……”更接近,但这工作,所以让我们钻研它。首先,这里是 Tk 增强的“Hello, World!”代码
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/wish
#
# Hello World, Tk-style
  
button .hello -text Hello \
  -command {puts stdout \
  "Hello, World!"}
button .goodbye -text Bye! \
  -command {exit}
  
pack .hello -padx 60 -pady 5
pack .goodbye -padx 60 -pady 5




在第一行中调用 wish(Tk 外壳)会产生缺省大小的窗口小部件。然后,定义了两个按钮小部件 .hello.goodbye ― 它们被放进窗口中,该窗口收缩至由指定按钮间距定义的大小。执行该脚本时,在左边会显示一个对话框。单击 Hello 按钮,在父终端窗口中得到“Hello, World!”输出,单击 Bye! 以终止脚本。
Tk 小部件在创建 Tk 小部件时,几乎很少使用命令。一半以上都是按钮或文本小部件的变体,如下面的列表所示。其中几项在下一屏中演示。
  • button ― 有二十多种配置选项(从 anchorfontpadxrelief)的简单小部件。
  • canvas ―  画布是一种小部件,不仅可以包含其它小部件,而且包含各种类型的结构化图形,包括圆、线和多边形。
  • checkbutton ― 创建复选框样式的按钮小部件,它链接到一个变量。
  • entry ― 构建单行文本输入框。
  • frame ― 框架是主要用作容器或定位架的小部件。
  • label ― 创建标签对象。
  • listbox ― 创建文本字符串列表框。在定义小部件之后,添加各项。
  • menu ― 单个多面小部件,包含多种菜单样式的各种项。
  • menubutton ― 为下拉菜单实现提供可单击的顶级界面。
  • message ― 创建包括版本调整和字自动换行特性的文本显示窗口小部件。
  • radiobutton ― 创建单选按钮,它可以是与指定变量相关的一个集合之一。
  • scale ― 为在指定范围和分辨率内选择值而创建滑动块。
  • scrollbar ― 为在相关小部件中更改部分内容(通常是文本或图)而生成小部件。
  • text ― 创建显示一个或多个文本行并允许编辑该文本的小部件。
  • toplevel ― 创建新的顶级(在 X 桌面上)窗口。
Tk 演示Tk 小部件的分类取样器象一些简单的 Tk 代码一样,下面这个清单中的代码生成左边的图像。在图像的文本窗口中显示了通过 OK 按钮调用的过程代码和样本输出。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
~/tcltk$ wish
%  . configure -width 200 -height 400
% label .header -text "Tk Tutorial Example"
.header
% place .header -x 5 -y 2
% scale .slider -from 1 -to 100 -orient horiz
.slider
% .slider configure -variable SlidVal
% place .slider -x 5 -y 20
% entry .slidbox -width 5 -textvariable SlidVal
.slidbox
% place .slidbox -x 120 -y 38
% radiobutton .one -text "Don't Worry" -variable Mood -value 1
.one
% radiobutton .two -text "Be Happy" -variable Mood -value 2
.two
% place .one -x 5 -y 70
% place .two -x 5 -y 90
% text .twindow -width 22 -height 14 -font {clean -14}
.twindow
% place .twindow -x 5 -y 120
% button .ok -command {process_data $SlidVal} -text "OK"
.ok
% button .cancel -command {exit} -text "Cancel" -background red
.cancel
% place .ok -x 15 -y 350
% place .cancel -x 120 -y 350




Tk 命令,第一部分有二十多条 Tk 命令用于对 Tk 小部件集的使用、增强或补充。它们包括 bell,响铃,这取决于对正在运行的 X Window 系统的配置。bind 创建 Tcl 脚本和 X 事件之间的关联;例如,指定的键盘/鼠标组合操作。clipboard 是另一种多功能 Tk 命令 ― 它包含用于清除内容、装入内容和将内容粘贴到 Tk 剪贴板以及从 Tk 剪贴板粘贴内容(这不同于正在使用的 X 或窗口管理器本身所具有的任何剪贴板功能)。
destroy 用于删除窗口及其所有子窗口。在‘.’(根)窗口中使用时,它删除整个应用程序。event 是一种功效强大的工具,用于生成虚拟窗口事件并将这些事件插入正在处理的队列中,就好象实际事件(例如,用鼠标单击按钮)已经真的发生一样。font 命令用于创建指定的系统字体实例。它允许系统字体的本地(对于脚本而言)命名、已命名字体的属性修改以及字体的“删除”。在 wish 提示符下输入 font families,可以获得可用字体的列表。
焦点是窗口管理舞台中的一个重要概念 ― 在任何给定的显示中,每次只能有一个窗口“注意”键盘和鼠标。Tk focus 命令用于将脚本控制交给显示焦点,并将它发送到指定窗口。补充函数 grab 允许 Tk 独占对某处的显示焦点,在该处,在窗口环境中报告位于窗口之外发生的事件。当要在任何其它系统活动发生之前强迫完成某一选项时,这是有用的。
Tk 命令,第二部分继续概述 Tk 命令,下一个是 grid,控制 Tk 窗口几何性质的接口。它用于在窗口中以行和列的格式安排小部件。                                lower(和补充命令 raise)解决子窗口的可见性。下层(lowered)窗口不会遮掩与其重叠的兄弟窗口;上层(raised)窗口被带到最上层。在显示多个文档情形下会经常使用。许多 Tk 小部件和命令都使用一组公共的标准选项。可以使用 option 命令来查看或添加它们。
对于将小部件和子窗口放入窗口中,有两条命令:packplace,它们都已演示过。其最简单的使用,pack 将一个或多个小部件添加到窗口,并将这些对象周围的窗口缩小至我们在本节开始部分的 Tk Hello 示例中所看到的那样,除非另有指明。place 使用相对或绝对尺寸来设置和显示父窗口中的对象,例如,从左边开始的 5 个像素,或窗口下一半(0.5)。
其它命令包括 selection,X 对象选择工具集的接口;tk,它提供对 Tk 解释器内部状态的所选择部分的访问;winfo 命令,用于检索有关 Tk 管理的窗口的数据;wm,正在运行窗口管理器的界面,用于设置从标题栏文本到所有类型的几何规范和约束的多个功能。
真的(小)Tk 应用程序我需要每天运行的 LAN 转换脚本的接口。所以为方便使用,让我们使用 Tcl/Tk 来构建一个小工具。我希望它能够根据主目录中的 ASCII 配置文件提供一些选择。该文件包含下表中所示的数据:
1
2
3
4
5
6
7
# ~/.netsetrc
# 03.26.2001 bilbrey
# space between name and command

Home /usr/local/bin/nethome
Office /usr/local/bin/netoffice
Admin /usr/local/bin/netadmin




应用程序(在下一屏显示完整代码清单和图像)读取配置文件并对按钮名及其相关操作的每个非空白、非注释行进行解析。虽然通过定义三个按钮来运行显式程序,会使编写脚本变得更加容易,但这种更一般的解决方案允许我只要把单一行添加到 ~/.netsetrc 中,就可添加我想要的任何功能。
该代码的缺点是,它不容许配置文件格式有严重错误。在按钮按下时,它期望是这样的格式:单字按钮名,接着是一个空格,接着是执行的命令(如果有必要,可以有自变量)。不过,从理论上讲,与无结构的用户输入相比,配置文件更容易保持在一行上。
样本 Tk 应用程序样本 Tk 应用程序对话框
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/wish
#
# netset.tcl
# 03.26.2001 bilbrey
  
set ConFile "~/.netsetrc"
  
if [catch {open $ConFile r} Conf] {
  puts stderr "Open $ConFile failed"
  return 1
}
  
# parse config, define buttons
set Bcount 0
while {[gets $Conf Cline] >= 0} {
  if {1 == [string match #* $Cline]} continue
  if {[string length $Cline] < 4} continue
  
  set Nend [string wordend $Cline 0]
  incr Nend -1
  set Bname [string range $Cline 0 $Nend]
  set Cbeg [expr $Nend + 2]
  set Bcomd "exec "
  append Bcomd [string range $Cline $Cbeg end]
  
  incr Bcount
  set NextBut "button$Bcount"
  button .$NextBut -text $Bname -command $Bcomd
}
  
if {$Bcount == 1} {
  puts stderr "No buttons defined"
  return 2
}
  
# display buttons
while {$Bcount >= 1} {
  set NextBut "button$Bcount"
  pack .$NextBut -padx 10 -pady 10
  incr Bcount -1
}
  
button .exit -text Exit -command {exit}
pack .exit -padx 10 -pady 10

返回列表