一种高效的可扩展的GUI开发工具—T cl/
Tk
第27誊第4期西南民族学院学报?自然科学版
journalofS’outhwestUniversityforNationalities.NaturalScienceEdition
文章编号i0tl3.2843c2001】04—0402-04
种高效的可扩展的GUI开发工具——Tcl/Tk
刘莉.马丽,伍珂
l西南艮袭学院计算机科学与技丰学院,成都51004112中国联通四)¨分公司,成都610036, 摘要:Tcl/Tk是一种简明,高效,可移植性好的具有C/C++应用编程接口的编程语言.本文介绍其特点,优
势和结构,并详细描述了如何用C语言创建新的Tc】/rrk命令
关键词:tcL/tk;图形用户界面(GUI);解释器
中图分类号:TP311.1文献标识码:A
1Tcl/『k的特点
本文讨论两个称为Tcl和Tk的包,它们提供了一个开发和利用图形用户界面(GU1)的应用程序编程系统
Tel代表”toolcommand[anguage”,读为”tickle”,是一个用于控制和扩展程序的简单的脚本语言,它提供一般的对
各种应用程序有用的编程环境,比如:变量,循环,子程序等而且,Td是可嵌人的:它的解释程序是作为一个c
子程序库来实现的,可以很容易地和应用程序组合成一体,并且每个应用程序都可以通过扩展其所特有的的命令
来扩展1’cl核心.
Tcl一个撮有用的扩展是Tk,它是xWindow系统的工具包,读为”tee-key”Tk通过增加建立用户接口命令
来扩展Tc[核心,使用户可以通过写Tcl脚本而不用写c代码来创建motif用户接口.与Td相同,Tk也是作为
个c子程序库来实现的,所以它也可以用于各种不同的应用程序中各个应用程序也可以用c 编写的Tk的用
户接Vl构件(widgets)和geometrymanagers来扩展Tk基础特征
Tel/Tk为应用程序开发者和用户提供了四个方面的好处:
第一.Tcl为应用程序提供了一功能强大的脚本语言,应用程序所需要做的就是实现一些新的提供应用程序
基本特征的Tel命令,然后把这些程序同Td解释程序相链接以提供一个全功能脚本语言,它既包含了Tel所提
供的命令(称为Telc0re)又包含了由应用程序所实现的那些命令.
例如,一个阅读电子公告板的应用程序包含实现一个查询电子公告板的Tcl命令的C源代码,以及另一个提
取给定信息的Tcl命令.一旦这些命令存在以后,我们就可以写出Td脚本来循环地从所有的电子公告板中获取
新信息并且每次显示一条,或者在磁盘文件中记录哪些信息已经被读哪些还没有?或者从一个或更多的电子公
告板中查某个特定主题的信息这些电子公告板应用程序将不必用c来实现这些附加的函数;它们可以作为
Tcl脚本来写,应用程序的用户们还可以写出其它的Tcl脚本来为应用程序添加更多的函数. Td厂rk的第二个好处在于它的快速的开发速度许多有趣的窗口应用程序可以完全用TcL 脚本来写而不用
点c代码,通过使用一个称为wish的窗口shell米完成这就使用户比用c或c++编程高了一个级别,它为
用户隐藏了许多c程序员必须强调的细节,与完全用c编程的工具包相比,比如Xt/Motif,使用Tcl/Tk所需要
学习的东西更少,所需要写的代码也更少,Tcl/Tk的新手在学习几个小时后就可以创建有趣的用户接口许多人
在从其它工具包转向Tcl/Tk后,代码量和开发时阃减少了十倍
另一个Tcl/Tk快速开发的原因是Tcl是一个解释性的语言,当使用象wish这样的Tcl应用程序时,用户可
以临时地生成和执行新的脚本而不需要重新编译或重启应用程序,这允许用户迅速地检验新的想法和确定bug
当然,由于Tcl是解释型的,它的执行速度比编译后的c代码要慢得多但是现在的工作平台速度都非常快,只有
在少数的情况下,当性能成为问题时,用户可用C来重新实现Tcl脚本中影响性能的最关键的部分.
TcI的第三个好处是它成为了一种极好的”胶水语言”,因为它是可嵌人的,它可以在许多不同的程序中用于
收稿日期:2001.09—03
作者简介:刘莉(1965一).女,西南民族学院计算机学院讲师
第4期刘莉等:一种高效的可扩展的GUI开发工具——Tcl,rk403
各种不同的目的这样的话,那么写出结合所有程序特征的Td脚本就成为可能例如,任何建立在Tk基础上的
窗口应用程序可以向其它的Tk应用程序发布一个Tel脚本这个特点使得多媒体效应更加容易达到:一旦用T_k
建立了音频的和视频的应用程序,任何Tk应用程序都可以向它们发出”record”和”play”命令另外,电子数据表
也可以由数据库应用程序来更新它自己,用户接口编辑器可以修改正运行的活动的应用程序的外观和性能等等,
Tcl提供了允许应用程序一起工作的混合语言
Tcl的第四个好处是使用的方便性.一旦一个用户了解了Tel/I’k后,他只需学会用于新的应用程序的几个
特定的命令,就能写出该Tcl/I’k应用程序的脚本来,这就使更多的用户能够提高和个性化他们的程序
正如每一种语言都以”Helloworld1,做为其第一个程序,让我们看看Tel/rk的”Helloworld”: buttonb—text”HelloWorldcommandexit
pab
程序的运行结果是:
这简简单单的两行命令,就已经实现了一个窗口程序所具有的全部功能,并且它还可以不加任何修改地运行
在X—Windows和MSWindows系统上.用鼠标点击该按纽或按空格键,该窗13将关闭,程序将退出.
2用C语言创建新的Tcl/Tk命令
T[:l门rk中易于增加用C/C++实现的新命令用C/C++的原因有两个,一个是因为用C/C++实现比
Tcl/rk实现的效率要高些,另一方面是因为有些应用无法用T[:l/rk实现,例如与硬件相关的设备的编程接13就
不能用Tcl脚本存取
种创建新的Td命令的方法是写出标准的独立的C子程序,并用Tel的exec命令来运行这些程序还有一
种方法是把Td看成为一个c程序库,该库很容易集成到现有的应用程序中,通过掭加Tel解释器,你可以用Tcl
脚本来配置和控制你的应用程序,再通过用Tk为程序提供一个更好的图形界面,这是Tcl最有独创性的模式.
文讨论第二种方式.首先,我们先了解一些相关的内容和例程,然后再实现新的TcI命令
2.1应用程序的结构
包含Tel解释器的应用程序的总体结构如图所示
l’l
上电
Ybur
r
Apcad.
TU
_____J
C
TclC代码库实现了解释器和set,while,proc之类的核心Tel命令,应用程序所特有的命令则用C/C++语言实
现并注册为解释器中命令,当T_cl脚本中用到这些应用程序特定的命令时,解释器将调用这些C代码命令子程
序命令子程序是在你的应用程序所能做的工作之上的有代表性的薄薄的一层.最后,你可以在C/C++中用
Tcl—Eval函数直接调用TcI/Tk命令
22TclMain和Tcl—Applnit
Tcl库通过Fcl—Main函数来支持基本的应用结构,该函数由main程序调用,它完成三方面
的工作:
(1)建一个包含所有标准Tcl命令(如:set,proc等)的解释器,同时也定义了几个象argc,a瑁v 这样的Td变
量,它们包含有传递给你的应用程序的命令行参数
西南民族学院学报?自然科学版第27卷
(2)调用Tel—Applnit函数,该函数不属于Tel库.由你的应用程序提供该函数.在Tcl—Applnit 中,你可以注
册应用程序特有的Tcl命令
(3)它读人一个脚本或进入一个交互式的循环中
类似地,Tk—Main也具有同样的功能由于TkMain包含了Tel—Main,若你使用到了Tk命令,则只需要调
用Tk—Main
3用C语言创建自己的Tel命令
创建自己的Td命令相对比较容易,当然,你需要存取Tel/Tk的库和头文件以及使用C和C++的编译器
最简单的方法就是在main()函数中调用TelMain(),如下面的eqcmdc程所示.
eqcmd.c程序用C创建了一个新的Tcl命令从Tel的观点看,该命令称为Eq.
调用TclCre~teCommand函数把命令名”Eq”和C函数Eqcmd()相连接,程序代码如下
#inc[ude”stdioh”
#include”stdlib,h”
#include”telh”
/*实现了一个名为Eq的Tel命令.它比较两个参数看是否相等,相等时返回值1,否则返回0*/ intEqC~d(ClientDataclientDataTcl—Interpinterp,
intargc.charargvlJ){
if(argc!=3)}
interp一>result=“wrong#args”:
retumTCL—ERROR;
*f
if(strcmp(argv[1],argv[2]):=0)
interp一>result=“l”:
lelse{
interp一>result:…0’;
returnTCL一0K
intTelApplnit(Tcllnterpinterp)/*该函数注册一个新的Tel命令*/
mtstatus;
status:Tcl—lnit(interp);/*初始化Tcl/Tk*/
if(status!=TCLOK)}
returnTCLERROR:
Tel—Cre~teCommand(interp,”Ecj”,(TelCmclProc*)EqCmd,(ClientData)NULL,(Tel—Cmd—DeleteProc*)NUII);/*把C函数EqCmd注册为一个Tel命令Eq*/
TcI—RcFileName=“~/.myapptel”;/*定义启动文件名.程序如果运行在交互式环境下,该文件将被读人
intmaln(intargc,char**argv)
第4期刘莉等:一种高效的可扩展的GUI开发工具——Tc1/1_k405
/*把命令行参数传给Tcl—Main(),它将调用TdApplnit函数*/
TclMain(argc,argv,TclApplnit)
return0:
编译运行以上程序后,你可以像其他Tcl命令那样在脚本中调用Eq命令
Eqabcclef
O
Eql1
l
setW.dig;setw2dlgok
Eq$wok$w2
1
4结束语
“小巧,易学,高效,跨平台执行”是Tcl语言特点的集中体现.实际上,Tcl不仅仅在开发小的应用程序上有
其快速,可维护强的优势,在大的应用系统方面,如操作系统及网络管理,测试系统,自控,仿真,可视化应用,计算
机辅助设计等都有丰富的应用成果在商业应用方面,如SYBASE公司花费上千万美金的数据库自适应测试系
统,Cygnus公司着名的集软件工程管理,源代码控制于一体的SourceNavigator,以及CayenneSoft的协同工作
组件ObjectTeam等等都是应用Tcl/Tk开发的.本文的目的就是期望该工具在国内得到更广泛的使用
参考文献app接口测试工具
[1]OusterhoutJKTdondTkToolkit.Addis[~一WesleyPuNishingCompany.1994
[2]Welch】BPracticalProgranmlirlgiaTdandTkPrentice-HallPTR.1995
[3]陆步飞,Tcl/rk大垒.中国互动出版剐htro://wwwchinapub AnEfficientExtensibleGUIDevelopmentT00l|【it——cl/】
LIULi,MALi,wuke2
(1D印anmentComputerSdenceandTechnology,SouthwestUniversityForNationalities,Chengdu610041
2ChinaUnitedTdecn~rnmunicationsCorporatien,SichuanBr0nch,Chengdu610036)
Abstract:Tcl/Tkisaconcise,efficient,portableprogramminglanguagewithC/C++applicationprogra m—
minginterface.Thispaperintroducesitsspecialities,advantages,architecture,andprovidesdetaileddes criptonofhow
tocreateanewTc1厂rkoommandinC
Keywords:Tcl/Tk;graphicaluserinterface;interpreter

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。