Tcl/Tk的一些笔记
快速图形界面开发语言Tcl/Tk
0.前言.在unix like系统下,有没有像VB一样的快速图象界面开发工
具呢?很多人大概马上会想到Kylix,基于Java的一些图形开发工具
。但是数百兆的安装大小对于一些简单用途是否小题大做了呢?其实,
很多脚本语言如Perl,Python本身就已经包含Tk库,可以用来建构图
形界面。不过,这些也都是数十兆的软件包,图形也并非主要用途,Tk
库往往不是缺省就包含的。那么设想有这样一种工具,它可以逐行运
行,即时显示图象效果和事件驱动效果,拥有简单的语法提示,又可
简单的回溯修改,系统不过数兆,除命令行外还拥有简单的类似VB,Kylix
的窗口界面开发工具,可以简单移植到各种软件平台,包括Palm掌上
电脑,软件不需要一行修改,你会考虑使用它吗?
在你的X Window界面下的Xterm里面输入wish,或者xwish,wish80,tix
等,有相当大概率会出现一个控制台和一个空白的窗口,恭喜,在你
不知道的时候,您已经拥有了它。
1.特点Tk是一套在Unix like,Mac,Windows下可移植的快速图形开发
工具ToolKit的缩写。它有多种语言界面,如C,Perl,Python等。而其
中其中常见也最方便短小的界面语言是Tcl。Tcl/Tk在有X window的unix
like系统下基本是缺省配置,在windows下的wrapper也不过几百k。
相对于其他图形界面开发语言来说实在是短小精悍。通过Visual Tcl,
你可以获得如同Visual Basic一样简单的快速开发能力。而Visual Tcl
这样一个强大的工具本身全部均为Tcl/Tk写成,大小不过数兆,可见
它的能力和容易程度。
它的缺点是:Tcl语言是一种几乎没有数据类型的语言!这是短小、
可移植带来的代价。它是一种几乎只用list作数据类型的语言,构造
十分精巧,写起它的语法解释程序时很简单。反过来,在写应用程序
时面对复杂的控制和计算有点麻烦(但是仍然能够解决,而且也不是
他的设计目的)。本文在此仅为介绍,细节请自己阅读mannual。相
关章节是n,例man n entry。
windows下的tcl/tk手册为一个HLP文件。
Tcl一个著名的扩展就是expect,可以作用来自动连接telnet等script
无法处理的智能应答工作。
Tcl/Tk的基本系统窗口类型比较少,常见的扩展有Tix,和面向对象的
版本itcl/itk(incr Tcl)。两者已包含在大多数Tcl/Tk系统中。
Tcl/Tk可以通过装载package来扩展命令和窗口类型。
可以通过下载别人写好的package,自己编写package,或者将Tcl/Tk
嵌入到C来完成复杂任务。
2。需求与安装、运行在unix like系统(Sun,Linux)下,Tcl/Tk需
要X支持(废话),但是Tcl本身不需要。在Mac、Windows下,需要安
装Tcl/Tk的移植版本。可以在http://dev.scriptics.com下载,最新
版本在8.3左右(2003年初)。您也许还需要Visual Tcl工具包,可
以在同一网址下载,它需要最新版本的Tcl/Tk支持。windows下全部
开发系统下载约5.2M,其中tcl/tk 2.5M(含手册,C调用Tcl/Tk的头
文件,库文件),Visual Tcl 2.9M。相对于Tk的C开发包庞大的身材
(当然也对应强大的功能),在简单的窗口开发中您也可以考虑采取C
内嵌Tcl/Tk的开发模式。
安装时Mac/Windows直接运行安装程序。
unix like系统下Tcl/Tk一般作为一个部件在安装X Window同时就装
好了(因为很小),没有安装的情况下也有rpm,binary.gz等包可以
安装。
windows下unix仿真程序cygwin32系统里面也包含Tcl/Tk。
运行Tcl语言的命令行程序名为tclsh,也许包含软件版本,如tclsh83
。cygwin里面的为cygtclsh83.exe。
运行Tk图形界面的命令为wish,同样可能包含数字后缀或者其他前缀
。
Tix,itcl,itk的命令行程序名分别是tix,itclsh,itkwish。
如果执行命令找不到而软件已安装,请将包含上述命令的路径包含到
您的path变量里面。
in unix(~/.profile)加入如下行: set path=$path:/local/bin/tcl/
(缺省不需要,因为就在X目录或者/bin里面就有)in windows(autoexec.bat)
加入如下行: path %path%;"c:Program FilesTclBin"具体目
录名在此仅为举例,不一定和您安装的目录一致,请自己修改。
Tcl可以被编译(须购买相应软件,可以提高运行速度),或者在windows
下直接wrap成一个独立运行的可执行文件(使用Visual Tcl工具包里
面的freewrap objectfile.tcl)。在普通模式下tcl在运行时也被编
译为机器无关的bytecode,不过你不需要知道细节。
3.Tcl简介
3.1 基础
Tcl语句为 Command [-option1 value1 [-option2 value2...] arg1 [arg2 arg3...]
在控制台输入命令后回车,命令即被执行并打
印当前命令的返回值。当一行写不下时可用续行,欲在一行包含多个语句可用;分开。
比如exec ls *.cTcl里面基本只有四种数据类型:简单字符串,数组,
表,变量。而字符串可以看作表的最基本单位,变量可以看作系统数
组里面以变量名为下标的字符串。平常所用的变量,命令等全部是字符串。
变量可以用variable来定义,通过set来赋值,unset来消除。变量用$
开头。
set a "this is good"
将$a赋值为"this is good"
set a [expr 3+$b]
此命令将3+$b的结果赋值给$a。
不带第二个参数将返回$a的值因为Tcl
里面没有数字类型,必须用expr来求字符串表达式的数学运算。
[]表示将括号内的表达式求值。在Tcl里面要使用命令的结果作为另一个命令的参数,就要用[]。
{}和()在Tcl里面已经有其他含义。
数组(或者说哈希表hash table)的下标是表(list),或者最简单的表:
不含空格和特殊字符的字符串,下标用()表示。
它可以用array来定义。
set ms(haha) a
set b ms
set c haha
则$b($c)的值为a。
变量或者数组无需定义即可使用,不过第一次使用时必须赋值。
表包含0到多个元素。
set a "this is a pen"
set b {this is a pen}a和b是等价的。
a的第一个元素是this,第二个是is,余下依次类推。
如果没有界定符,缺省界定符是空格,即set a "asdfg"和set a {asdfg}
和set a asdfg是等价的。
set a this返回只有一个元素this的表$a,或者说简单字符串$a。
表可以是空表set a ""set b {}表的元素也可以是表,空表和没有元
素是不同的如{a}不同于{a {}},{}不同于{
{}}。
set a {this is a list {a b c}}则表的第5个元素是{a b c}