ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:38.76KB ,
资源ID:2224801      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2224801.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(tcltk编程tcltk编程教程.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

tcltk编程tcltk编程教程.docx

1、tcltk编程tcltk编程教程Tcl / Tk 大全 1一. Tcl / Tk简介 111 背景 112 定义 2二. Tcl / Tk基础 32.1 交互方式 32.2 非交互方式 3三. TCL总体结构图 4四. 与其它语言的比较 4五. TCL语法 55.1 t c l 命令结构. 55.2 TCL 的注释 55.3 数据类型 65.4 变量 65.5 字符串的操作 85.6 引用和置换 105.7 流的控制 IF 和 SWITCH 125.8文件的输入输出和文件的信息 145.9 过程 16六.工具箱 176.1 构件的介绍 176.2 创建构件 176.3 构件的选项 186.4

2、一个TCL./TK 构件的编程示例 18七. 小结 20Tcl / Tk 大全摘要: Tcl/Tk 是一种简明,高效,可移植性好的编程语言。在信息产业领域具有广泛的应用。本文描述了TCL/TK成长历史,特点,优势及应用范围,阐述了TCL/TK的总体结构图,比较了TCL/TK与当今流行的C+,Java 的性能比较,详细阐述了TCL/TK的语法,并介绍了TK的工具箱.一. Tcl / Tk简介 11 背景Tcl/Tk 的发明人 John Ousterhout 教授在八十年代初,是伯克利大学的教授。在其教学过程中,他发现在集成电路 CAD 设计中,很多时间是花在编程建立测试环境上。并且,环境一旦发生

3、了变化,就要重新修改代码以适应。这种费力而又低效的方法,迫使 Ousterhout 教授力图寻找一种新的编程语言,它即要有好的代码可重用性,又要简单易学,这样就促成了 Tcl (Tool Command Language) 语言的产生。 Tcl 最初的构想的是希望把编程按照基于组件的方法 (component approach),即与其为单个的应用程序编写成百上千行的程序代码,不如寻找一个种方法将程序分割成一个个小的, 具备一定“完整”功能的,可重复使用的组件。这些小的组件小到可以基本满足一些独立的应用程序的需求,其它部分可由这些小的组件功能基础上生成。不同的组件有不同的功能,用于不同的目的。

4、并可为其它的应用程序所利用。当然, 这种语言还要有良好的扩展性, 以便用户为其增添新的功能模块。最后,需要用一种强的,灵活的“胶水”把这些组件“粘”合在一起, 使各个组件之间可互相“通信”,协同工作。程序设计有如拼图游戏一样,这种设计思想与后来的 Java 不谋而合。终于在 1988 年的春天, 这种强大灵活的胶水 - Tcl 语言被发明出来了。12 定义 按照 Ousterhout 教授的定义, Tcl 是一种可嵌入的命令脚本化语言 (Command Script Language)。“可嵌入”是指把很多应用有效,无缝地集成在一起。“命令”是指每一条 Tcl 语句都可以理解成命令加参数的形式

5、:命令 参数 1 参数 2 参数 3 参数 4 . 参数 N脚本化是指 Tcl 为特殊的,特定的任务所设计。但从现在角度看,可以说 Tcl 是一种集 C 语言灵活强大的功能与 BASIC 语言易学高效的风格于一身的通用程序设计语言。按照 Ousterhout 教授的定义, Tcl 是一种可嵌入的命令脚本化语言 (Command Script Language)。“可嵌入”是指把很多应用有效,无缝地集成在一起。“命令”是指每一条 Tcl 语句都可以理解成命令加参数的形式:命令 参数 1 参数 2 参数 3 参数 4 . 参数 N脚本化是指 Tcl 为特殊的,特定的任务所设计。但从现在角度看,可以

6、说 Tcl 是一种集 C 语言灵活强大的功能与 BASIC 语言易学高效的风格于一身的通用程序设计语言。 t c l (读作“t i c k l e ”)脚本语言和t k 工具箱是为X Wi n d o w 系统创建图形用户界面的编程环境。t c l 和t k 非常容易学习和使用,并且利用它们构造用户界面的速度要比利用传统的X Wi n d o w 编程方法快得多。它最初设计用来为交互式工具提供一种可复用的命令语言,但它的实际发展却远非如此,并且在众多的软件产品中被广泛应用。t c l / t k 的真正功能在于,利用t c l 脚本语言几乎完全可以编写复杂的图形应用程序,因而避开了利用C 语

7、言编写界面时所遇到的界面编程的许多复杂性。 t c l / t k 的正式We b 站点是h t t p : / / w w w. s c r i p t i c s . c o m /。 在这里t c l 平台是S c r i t p i c s 公司的产品。S c r i t p i c s 公司要把t c l 脚本语言推广到主流的团体中去。S c r i t p i c s 公司提供了开发工具,技术支持和在开发t c l 和t k 公开代码的软件包是对t c l 实行商业支持服务。该站点还具有下载和安装t c l / t k 最新版本的连接。目前,可得到的最新t c l / t k 的版

8、本是8 .4a 。 t c l 中的可执行程序t c l ,t c l s h ,w i s h 和t c l h e l p 被Red Hat 的r p m 安装在目录/ u s r / b i n 中。可以使用t c l h e l p 调出关于t c l 和t k 的帮助信息。系统中也提供了t c l s h 和w i s h 的手册页。二. Tcl / Tk基础 t c l 是类似于UNIX shell 的一种解释性的语言,这就是说,t c l 命令首先被读取,接着就被执行。也是一个用来设置查看的工具箱,它可以利用t c l 语法来创建按钮、滚动杆、对话框以及窗口等G U I 组件。为

9、了运行t c l 。t c l s h 和w i s h 与s h 或c s h 这样的标准UNIX shell 类似,它们都允许命令被交互地执行或从某个文件中读入。在实际情况中,人们很少交互地使用这些s h e l l ,因为它们的交互能力很有限。t c l 和w i s h 之间的主要差别是:t c l s h 只理解t c l 命令,而w i s h 理解t c l 和t k 两种命令。2.1 交互方式 本节将简单介绍tcl shell 的交互使用方式,从而来说明它的一个问题。要想开始交互使用t c l ,只须在UNIX shell 的提示符下输入t c l s h (或w i s h

10、),这时将出现如下提示符:在本章中,交互的命令以百分号( % )开始。在这一提示符后,输入如下命令:% echo “hello world ”在输入这一命令之后,hello world 将会显示在新的提示符之后。接下来执行如下命令:% puts “hello world ”此时,同样的输出结果将显示出来,不过这两个命令之间具有很大的差别。为了显示字符串“hello world ”,第一个命令运行的是e c h o 二进制文件,而第二个命令使用的是t c l 命令puts(put string)。e c h o 形式的”hello world ”,仅当交互运行t c l s h 时才起作用,这正

11、是交互使用t c l s h 和w i s h 的问题之一。例如,如果把命令:echo “hello world ”放入文件h e l l o w o r l d . t c l ,然后从t c l s h 中执行如下s o u r c e 命令:% source helloworld.tcl那么将会得到如下的错误信息:invalid command name “echo ”此行代码将在一个UNIX shell 中执行这一具有变化的命令。这只是在tcl shell 的交互方式中工作方式不同的事例之一。2.2 非交互方式 在通常情况下,t c l s h 和w i s h 般是以非交互的方式来使

12、用的,这就是说,它们在U N I X 的提示符( $ )下被调用并执行脚本,例如:$ tclsh myprog.tcl$ wish myprog.tcl或者从一个脚本内来调用它们,这个脚本的第一行通常与如下内容类似:#!/usr/bin/tclsh在通常情况下,对脚本的每次安装都必须修改第一行,因为w i s h 或t c h s h 可能位于不同的位置。为了避免在每次安装时都必须对脚本进行编辑,t c l s h 的手册页推荐利用如下三行代码作为所有t c l / t k 脚本的头三行:#!/bin/sh# the next line restarts using tclsh exec wi

13、sh “$0 ”“$”这意味着,用户只须在自己的路径中具有w i s h 就可以使用脚本。利用这种方法产生的各自的结果可能会根据系统上s h 版本的不同而不同。t c l 非交互使用方式的实际优点是与UNIX shell 的非交互使用方式的优点相同。非交互使用方式允许把多个命令组合在一起,并且只要输入脚本的名字就可以执行脚本中的所有命令,同时这种方式可以加速对大型程序的开发和调试。三. TCL总体结构图四. 与其它语言的比较下面就 Tcl 与经典的的程序设计语言 C+,及现在时髦的 Java 做一些比较:C+,Tcl/Tk 和 Java 的性能比较表C+Tcl/TkJava运行程序速度快与 C

14、+ 可比慢调试难易程度复杂每次修改完代码需重新编译简单修改完代码可直接运行比较简单修改完代码需重新编译成ByteCode, 而且编译速度很慢程序代码复杂程度以上面的 grep 为例复杂50 行程序代码简明10 行程序代码比较简单40 行程序代码系统资源占用情况200MB HD32MB Memory3MB HD4MB Memory20MB HD4MB Memory代码可维护性可移植性好一般较好五. TCL语法 本节将介绍t c l 的语法及其在脚本中的使用方式。下面几小节中的代码既可以交互地运行,也可以从脚本运行。在交互方式下,输出内容之间的间距会略有不同。5.1 t c l 命令结构. TCL

15、命令的基本结构是:commandname arguments这里的c o m m a n d n a m e 是t c l 所要执行的命令,a rg u m e n t s 是提供给此命令的可选变元,整个行(c o m m a n d n a m e 和a rg u m e n t s )称为一个命令。命令之间通过换行( n )或者由分号( ; )来分隔。如果在一行上只有一个命令,那么分号可以省略。作为说明,看下面两个命令:set foo 0set bar 1这两个命令可以写成两行,每行写一个;另外,它们也可以写在同一行上,例如:set foo 0; set bar 1;有时需要在表达式中使用

16、另一个表达式的值。使用方括号来实现:puts expr 1000/4;输出将是2 5 0 。在需要时方括号也可以嵌套。5.2 TCL 的注释 除命令外,t c l 脚本中另一种类型的代码行是注释。如同在UNIX shell 和P e r l 中那样,注释行是以号开头的行,例如:#this is a comment但是与s h e l l 中不同的是,下面一行内容并不是注释set foo 0 # initialize foo而且它将会产生一个错误,这是因为t c l 解析器总是认为一条命令应该以换行或分号结束,因此如果想要在命令所在的同一行上包括注释内容,这个命令必须以分号结束,就像下面这样:s

17、et foo 0;#initialize foo因此,用分号结束所有的命令通常是一种很好的做法,尽管有时分号并不是必需的。5.3 数据类型 t c l 不支持诸如i n t 、f l o a t 、d o u b l e 或c h a r 之类的变量类型。这意味着,在同一程序中,一个变量可以在不同的时刻分别被设置为数值、字符或字符串。但是在内部,t c l 把所有的变量都当作字符串来看待。当需要操作变量时,t c l 允许以A N S IC 所能识别的任何一种方式来提供数字(实数或整数),下面列出的是可以提供给变量的有效数字值的例子:7 4 整数0 11 2 八进制,以0 开头O x 4 a

18、十六进制,以O x 开头7 4 .实数7 4 . 0 实数7 . 4 e 1 实数7 . 4 e 1 实数除此之外的其他值都被当作是字符串,如果把它们应用于数学表达式,则会产生错误。5.4 变量t c l 可以定义两种类型的变量:标量和数组。要创建标量变量并对它赋值,可利用s e t 命令,例如:set banana 1 ;这一命令将创建变量b a n a n a 并把它的值赋为1 。要想把变量b a n a n a 设置为另一个值,只须再次利用s e t ,例如:set banana Fresh from Brazil;此时变量b a n a n a 具有的值为“Fresh from Bra

19、zil ”,命令中的双引号用来通知t c l 变量的值由引号中包括空格在内的所有字符组成(在本章后续章节中将讨论引用和置换)。要输出b a n a n a 的值,可利用p u t s 命令:puts $banana;这一命令将把变量b a n a n a 的值显示到标准输出(也称为S T D O U T )。在变量名前放置$用来通知t c l 访问的是这一变量的值,这个规定称为变量置换,它与UNIX shell 中所使用的规定类似。注意 要使用变量内容时应使用$符,而在设置或改变变量时不必使用$.要想创建一个一维数组,可以像下面这样进行:set fruit(O)banana;set fruit

20、(1)orange;这两个命令将创建一个数组变量f r u i t ,并把它的两个元素。0 和1 分别赋值为b a n a n a 和o r a n g e 。注意计算机记数是从0 ,而不是从1 开始。对数组的赋值不必按照索引的顺序,例如,下面命令在数组f r u i t 中创建了三个元素。set fruit 100 peach;set fruit 2 kiwi;set fruit 87 pear;t c l 中的数组非常类似于把“关键字”与值联系在一起的关联数组。t c l 中的数到把某一给定的字符串与另一个字符串联系起来,这使得这种数组可能具有非数字的数组下标,例如:fruit to 10

21、0:set fruit banana 100这一命令把数组f r u i t 中元素b a n a n a 的值设置为1 0 0 ,被赋的值也可以不是数字,例如:set food(koala) eucalyptus;set food(chipmunk) acorn;如果想访问存放在一维数组中的值,可利用$,例如:puts $food(koala);这一命令将显示出存放在数组f o o d 中下标为k o a l a 的值,数组的下标也可以是一个变量,例如:set animal chipmunk;puts $food($animal);如果在前面进行了赋值,这两个命令将输出a c o r n 。

22、多维数组是一维数组的简单扩充,它们的设置方式如下:set myarray(1,1) 0;这一命令把数组m y a r r a y 中位于1 ,1 处的元素的值设置为0 。通过利用逗号分隔下标,你可以设置三维、四维或更多维的数组,例如:set array(1,1,1,1,1,1) “foo ”除了设置数组的值外,t c l 还提供用来获取有关数组信息的命令a r r a y ,以及用来输出有关数组信息的命令p a r r a y 。首先,我们来考察p a r r a y 命令。如果已经提供了如下命令:set food(koala) eucalyptus;set food(chipmunk) ac

23、orn;set food(panda) bamboo;那么命令parray food将产生如下的输出结果:food(chipmunk)=acornfood(koala)=eucalyptusfood(panda)=bamboo接下来我们来考察a r r a y 命令及其变元,这个命令用来获取有关数组及其元素的信息。a r r a y 命令的基本语法如下:array option arrayname在本节后面将讨论它所支持的选项。有关数组最常用的信息之一是数组的大小。如果已经提供了如下说明:set fruit(0) banana;set fruit(1) peach;set fruit(2) p

24、ear;set fruit(3) apple;那么命令array size fruit;将返回4 ,这一数值通常在循环中非常有用。由于数组可以具有非顺序的或非数字的下标,因此a r r a y 命令提供一个用来从数组中获取元素的选项。假设数组f o o d 已经像前面介绍的那样进行了定义,那么开始获取元素所须做的第一件事是利用s t a r t s e a r c h 遍历数组。这是通过首先获取数组的一个搜索I D 来完成的:set food_sid array startsearch food在方括号中的命令array startsearch food 返回一个字符串,这一字符串是搜索标志的

25、名字(请参看“引用和替换”)。这个名字将在以后的引用中用到,因此需要把它赋给某个变量。在本例中,这一变量为f o o d _ s i d 。要获取f o o d 数组的第一个元素(以及其后的每个元素),可以利用如下命令:array nextelement food $food_sid;当完成对数组的搜索时,可利用如下命令终止搜索:array donesearch food $food_sid;a r r a y 命令的另一个选项是在遍历数组时经常用到的a n y m o r e 。当在搜索中还有元素时,它将返回t r u e (也就是1 ),这一命令当与前面所说明的数组f o o d 一起使用

26、时,在前两次将返回1 。array anymore food $food_sid;要清除变量(标量或数组),可以利用u n s e t 命令,例如:unset banana;这个命令将取消b a n a n a 变量。如果你利用unset $banana (假如b a n a n a 已被设置为前面所显示的值)来取代刚才的b a n a n a ,那么你会得到如下一条错误信息:cant unset 0 : no such variable发生错误的原因是:当把$放在变量名的前面时,在执行命令之前变量的值将被替换进去。5.5 字符串的操作对字符串进行操作的最简单的形式是利用a p p e n d

27、 命令把多个字符和变量连接在一起。作为说明,考察如下几条命令这些命令的输出结果为:Begin a String with some text and add even more text to it.你也可以利用如下命令来达到相同的结果:但是这种做法与利用a p p e n d 相比,执行起来要慢一些,这是因为a p p e n d 不像s e t 那样要执行字符拷贝。为了能够执行更多高级的字符操作,t c l 提供了s t r i n g 命令,这一命令能够识别许多选项。s t i n g 命令的基本语法是:string option string1 string2这里的s t r i n

28、g 1 和s t r i n g 2 可以是文字串(例如,“this is a string ”),也可以是变量,o p t i o n 是下列选项之一:c o m p a r e 按照词典的排序方式进行比较,根据s t r i n g 1 小于、等于或大于s t r i n g 2 ,分别返回-1 、0 或1 (类似于C 库函数s t r c m p )f i r s t 返回在s t r i n g 2 中第一次出现s t r i n g 1 的位置如果s t r i n g 1 没有出现在s t r i n g 2 中,则返回-1l a s t 返回在s t r i n g 2 中最后一

29、次出现s t r i n g 1 的位置。如果s t r i n g 1 没有出现在s t r i n g 2 中,则返回-1s t r i n g 命令的如下选项将把s t r i n g 2 解释为要从s t r i n g l 中删除的一列字符:t r i m 从s t r i n g 1 中删除开头和结尾的出现在s t r i n g 2 中的字符t r i m l e f t 从s t r i n g 1 中删除开头的出现在s t r i n g 2 中的字符t r i m r i g h t 从s t r i n g 1 中删除结尾的出现在s t r i n g 2 中的字符s t

30、 r i n g 命令的如下选项只利用s t r i n g 1 作为变元:l e n g t h 返回s t r i n g 1 包含的字符数t o l o w e r 返回s t r i n g 1 中的所有字符被转换为小写字符后的新字符串t o u p p e r 返回s t r i n g 1 中的所有字符被转换为大写字符后的新字符串现在让我们来考察几个例子。首先,创建一个字符串并获取其长度:set str Here Is A Test String;string length $str;这一命令给出的长度为2 3 (l e n g t h 选项对空格字符也计算在内)。现在,让我们来获

31、取在s t r 字符串中第一次和最后一次出现字符串“s t ”的位置:string first st $str;string last st $str这两个命令给出第一次出现“t ”的值为1 3 (相应于在Te s t 中出现的位置),最后一次出现“s t ”的值也为1 3 (还是Te s t )。在S t r i n g 中出现的“t ”为什么不算数呢?这是因为大多数字符串比较函数是区分大小写和空格的,下面的代码将首先把s t r 转换为小写字体,然后再执行查找:string last st string tolower $str;此时,这一命令给出的值为1 6 ,它相应于S t r i n g 中的“s t ”。最后,让我们来删除$ s t r 字符串前后的空格,然后获取这一字符串的长度:string length string trim $str ,该命令的返回值为2 1 ,这意味着已经删除了第一个和最后一个空格。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2