TCL_TK进阶练习

合集下载

TCL自动化测试脚本语言编程试题(附答案) - 副本

TCL自动化测试脚本语言编程试题(附答案) - 副本

一填空题(每题2分,共10分)1.以下对自动化测试描述不正确的是?A.自动化测试可替代手工测试B.自动化测试发现的故障数不及手工测试C.自动化测试对测试质量的依赖性大D.自动化测试应在周期长的项目中引入2.自动化测试分析时,不该做的分析是下面哪一个?A.可行性分析B.测试需求分析C.抽样demo分析D.软件成本分析3.下列对自动化测试用例设计原则描述中,不正确的是?A.自动化测试用例的选择一般以“反向”为主B.自动化测试用例的范围往往是核心业务流程C.不是所有的手工测试用例都可以使用自动化测试来实现D.自动化测试用例不需要每个步骤都输出预期结果4.自动化测试工具QTP支持的语言是下面哪一种?A.JavaB.RubyC.PythonD.VBScript5.QTP工具中用于实现QTP说明书功能的是哪个键?A.F1B.F2C.F3D.F5二简答题(每题5分,共50分)注:为区分特殊符号,本次考试需要打印输出的内容在卷面中以粗斜体显示!1.自动化测试中,测试脚本可分为哪5种?1)线性脚本2)结构化脚本3)可共享脚本4)数据驱动脚本5)关键字驱动脚本2.自动化测试优势1)回归测试更方便、可靠;2)可运行更多、繁琐的测试,且高校、快速;3)可执行一些对于手工测试来说相当困难或根本做不到的测试;4)更好的利用资源,使资源的使用更有价值;5)具有一致性和可重复性;6)自动化测试脚本完全具有服用性;7)使软件更有信任度;8)多环境下测试;3.画出自动化测试流程图:4.打印输出“Hello Tcl!”;% puts "Hello Tcl!"5.定义变量a=10、b=20、c=a*b,输出变量c;% set a 10% set b 20% set c [expr $a * $b]6.计算字符串“My name is TCL”的长度;% puts stdout "The length of \"$a\" is: [string length $a]"7.已知本地E:\TCL\TCL_setup目录下存在脚本文件exec.tcl,请给出调用该脚本的方法;% cd E:\\TCL\\TCL_setup% source exec.tcl8.对数字5进行左移2位运算,并将计算结果赋值给变量n;% set n [expr 5<<2]9.计算2^16,并将结果取整显示;% expr int(pow(2,16))10.取5-10之间的随机数;% set min 5% set max 10% expr int(rand()*($max-$min+1)+$min)11.将字符串“again”追加至变量a尾部,输出追加后的字符串“see u again”;% set a "see u"% set b again% append a \ $bsee u again12.重新排列字符串"love" "game" "i" "this" "!";% set var1 [format "%3\$s %1\$s %4\$s %2\$s %5\$s" "love" "game" "i" "this" "!"]13.提取数字1-20中的质数,并按照升序排列输出;% set res [format "%1\$s %3\$s %5\$s %7\$s %11\$s %13\$s %17\$s %19\$s" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]14.用科学计数法表示数字80000,并记录在由ascii码转换后的符号()内;% set c [format %c%e%c 40 80000 41](8.000000e+004)15.获得字符串“hello”中字符e的整数值;% binary scan "hello" "cc" var1 var2% puts $var216.将字符串“sorry”中的字符o替换为字符@;% string replace sorry 1 1 @17.已知列表a [my name is tom],输出列表中的tom字符串;% set a "my name is tom"% puts [lindex $a 3]18.使用列表遍历指令输出下面内容:我喜欢吃: 苹果我喜欢吃: 梨子我喜欢吃: 香蕉我喜欢吃: 西瓜set fruit {苹果梨子香蕉西瓜}foreach f $fruit {puts "我喜欢吃: $f"}19.遍历列表输出下面内容:学号=1 姓名=tom 年龄=23 班级=C1学号=2 姓名=jack 年龄=22 班级=C2学号=3 姓名=nacy 年龄=21 班级=C3学号=4 姓名=peter 年龄=22 班级=C4set id {1 2 3 4}set name {tom jack nacy peter}set age {23 22 21 22}set classes {C1 C2 C3 C4}foreach a $id b $name c $age d $classes {puts [format "学号=%-s 姓名=%-s 年龄=%-s 班级=%-s" $a $b $c $d] }20.已知整数123,分别取出个位数,十位数和百位数;% set i 123% set a [expr $i/100]% set b [expr $i%100/10]% set c [expr $i%10]% puts $a,$b,$c21.将下列代码未完成的地方补充完整;set ids(a) 192set ids(b) 168set ids(c) 5set ids(d) 100set lst [ array get ids ]puts $lstforeach { x y } $lst {puts "x:$x y:$y"}提示:以上代码输出结果为:x:4 y:100x:2 y:168x:3 y:522.使用if语句实现功能:变量a为10,变量b为20,若a+b>20,输出结果,反之给出错误提示信息“Error”;set i 10set j 20if {[expr $j+$i]>20} {set x [expr $i+$j]puts $x} else {puts "Error"}三代码编程题(每题10分,共40分)1.求水仙花数(水仙花数是个三位数,比如153,这个数具有个特点,153=1^3+5^3+3^3) set i 100while {$i<1000} {set a [expr $i/100]set b [expr $i%100/10]set c [expr $i%10]set d [expr int(pow($a,3)+pow($b,3)+pow($c,3))]if {$i==$d} {puts $i}incr i}2.青蛙在一口77米深的井底往上爬,白天爬7米,夜里下落5米,问第几天能爬出井口?set cn 7set day 1while {$cn<=77} {incr cn -5incr day 1incr cn +7}puts $day3.求出1-100之间所有正整数之和,包含1和100;set i 1set sum 0while {$i<=100} {set sum [expr $i+$sum]#set i [expr $i+1]}puts $sum4.输出1-100之间能被5整除的数;set i 1while {$i<=100} {set result [expr $i%5]if {$result==0} {puts $i}incr i}5.打印9行9列左上直角三角形;proc leftup {b} {for {set y 0} {$y<$b} {incr y} {set line ""for {set x 0} {$x+$y<9} {incr x} { append line *}puts $line}}puts [leftup 9]6.编写代码输出十进制转二进制的函数;proc d2b {d} {set bs ""while {$d!=0} {set y [expr $d%2]set d [expr $d/2]set bs $y$bs}return $bs}puts [d2b 77]7.编写代码判断某个1993年是否为闰年;set i 1993set a [expr $i%4]set b [expr $i%100]set c [expr $i%400]if { $a==0 | $b==0 & $c==0 } {puts "\"$i\"年是闰年"} else {puts "\"$i\"年不是闰年"}8.打印9行9列右下直角三角形。

ANSYS-Tcl_Tk-Legacy-Training-2013_02_01

ANSYS-Tcl_Tk-Legacy-Training-2013_02_01

Advanced ANSYS Customization
3/31/01 - 1-

Legacy Training Material Offered with no restrictions and no guarantee of accuracy.
Part 3a: Introduction to the Tcl/Tk Language
What is this Tcl/Tk?
• Tcl/Tk (tickle-T-K) is actually two things
– Tcl (Tool Command Language) is an interpreted scripting language
• Built with extensions in mind • Works well with „C‟ and C++ • Next step after PERL
Set command of button to put up a message box that verifies things.
If the message box answers OK, then destroy the window
Show everything by using a pack on all the items
• Books
– Practical Programming in Tcl and Tk by Brent Welch. Prentice Hall, 1999. 3rd Ed ISBN: 0-13-022028-0. – Tcl and the Tk Toolkit by John Ousterhout, Addison-Wesley, ISBN 0-201-63337-X – Graphical Applications with Tcl and Tk by Eric F. Johnson, M&T Books, 1997, ISBN: 1-55851-569-0 – Tcl/Tk in a Nutshell ISBN 1-56592-433-9. – Effective Tcl/Tk Programming by Mark Harrison and Michael Mclennan, Addison-Wesley, 1997 ISBN: 0-201-63474-0.

TCL&TK大全

TCL&TK大全
Tcl 最初的构想的是希望把编程按照基于组件的方法 (component approach),即与其为 单个的应用程序编写成百上千行的程序代码,不如寻找一个种方法将程序分割成一个个小的, 具备一定“完整”功能的,可重复使用的组件。这些小的组件小到可以基本满足一些独立的 应用程序的需求,其它部分可由这些小的组件功能基础上生成。不同的组件有不同的功能, 用于不同的目的。并可为其它的应用程序所利用。当然, 这种语言还要有良好的扩展性, 以 便用户为其增添新的功能模块。最后,需要用一种强的,灵活的“胶水”把这些组件“粘” 合在一起, 使各个组件之间可互相“通信”,协同工作。程序设计有如拼图游戏一样,这种 设计思想与后来的 Java 不谋而合。终于在 1988 年的春天, 这种强大灵活的胶水 - Tcl 语 言被发明出来了。
命令 [参数 1] [参数 2] [参数 3] [参数 4] ...... [参数 N]
2
Tcl / Tk 大全
脚本化是指 Tcl 为特殊的,特定的任务所设计。但从现在角度看,可以说 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 语言编写界面时所遇到的界面编程的许多复杂性。
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 .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培训教程(全)

TCL培训教程(全)

TCL培训教程(全)(仅供内部使用)拟制:陈旭盛日期:2000/12/08 审核:日期:yyyy/mm/dd 审核:日期:yyyy/mm/dd 批准:日期:yyyy/mm/dd深圳市华为技术有限公司版权所有侵权必究修订记录目录1引言 6 2语法72.1脚本、命令和单词符号72.2置换(substitution) 72.2.1变量置换(variable subtitution) 82.2.2命令置换(command substitution) 82.2.3反斜杠置换(backslash substitution) 82.2.4双引号和花括号92.3注释9 3变量103.1简单变量103.2数组113.3相关命令113.3.1set 113.3.2unset 113.3.3append和incr 12 4表达式124.1操作数124.2运算符和优先级124.3数学函数13 5List 145.1list命令145.2concat命令: 145.3lindex命令155.4llength命令155.5linsert命令155.6lreplace命令: 155.7lrange 命令: 155.8lappend命令: 155.9lsearch 命令: 165.10lsort命令: 165.11split命令: 165.12join命令17 6控制流176.1if命令176.2循环命令:while 、for、 foreach 176.2.1while命令176.2.2for命令186.2.3foreach命令186.2.4break和continue命令196.2.5switch 命令196.1eval命令196.2source命令19 7过程(procedure) 207.1过程定义和返回值207.2局部变量和全局变量207.3缺省参数和可变个数参数217.4引用:upvar 21 8字符串操作228.1format命令228.2scan命令238.3regexp命令238.4regsub命令258.5string命令258.5.1string compare ?-nocase? ?-length int? string1 string2 258.5.2string equal ?-nocase? ?-length int? string1 string2 258.5.3string first string1 string2 ?startindex? 268.5.4string index string charIndex 268.5.5string last string1 string2 ?startindex? 268.5.6string length string 268.5.7string match ?-nocase? pattern string 268.5.8string range string first last 278.5.9string repeat string count 278.5.10string replace string first last ?newstring? 278.5.11string tolower string ?first? ?last? 278.5.12string toupper string ?first? ?last? 278.5.13 string trim string ?chars? 278.5.14string trimleft string ?chars? 278.5.15string trimright string ?chars? 27 9文件访问289.1文件名289.2基本文件输入输出命令289.3随机文件访问299.4 当前工作目录309.5文件操作和获取文件信息30 10错误和异常3310.1错误3310.2从TCL脚本中产生错误3410.3使用catch捕获错误3510.4其他异常3511深入TCL 3711.1查询数组中的元素3711.2 info命令3811.2.1变量信息3811.2.2过程信息3911.2.3命令信息4011.2.4 TCL的版本和库4111.2.5 命令的执行时间4111.2.6 跟踪变量4111.2.7 命令的重命名和删除4311.2.8 unknown命令4411.2.9自动加载44 12历史记录45 13TCL和C\C++ 4713.1生成自己的TCLSH 4813.2扩展自己的命令:方法(一) 4813.2.1编写扩展命令对应的C/C++过程4813.2.2注册命令4913.2.3命令返回值和命令对应的过程的返回值5013.3扩展自己的命令:方法(二) 5213.3.1Tcl_Obj结构5213.3.2编写扩展命令对应的C/C++过程5413.3.3注册命令5413.4利用clientData参数和deleteProc参数5513.5在C/C++应用程序中嵌入TCL 58 14总结59TCL培训教程(全)关键词:TCL摘要:本文是TCL教材的第三稿,前两稿分别是《TCL的使用》和《TCL培训教程》。

2024版年度TCL培训教程笔记

2024版年度TCL培训教程笔记

目录•TCL基础概念与特点•TCL基本语法与数据结构•TCL过程与函数定义调用•TCL扩展功能库使用指南•TCL界面编程技术实践•TCL网络编程应用实例•TCL测试与调试技巧分享TCL基础概念与特点01TCL(Tool Command Language)是一种广泛应用的嵌入式脚本语言。

02发展历程:起源于20世纪80年代,由John Ousterhout教授创建,至今仍在不断更新和发展。

03主要应用于快速原型开发、自动化测试、GUI应用程序等领域。

TCL定义及发展历程TCL语言特性与优势01语言特性简单易学、动态类型、面向对象、可扩展性强。

02优势跨平台兼容性好,易于与C/C等语言集成,提供丰富的库函数和工具。

应用领域及案例分析应用领域自动化测试、网络编程、嵌入式系统开发等。

案例分析如使用TCL进行自动化测试脚本编写,提高测试效率;在嵌入式系统中利用TCL实现动态配置和功能扩展。

开发环境与工具介绍开发环境支持多种操作系统,如Windows、Linux、macOS等。

工具介绍常用的开发工具有Tclsh、Tk、Expect等,分别用于命令行交互、GUI开发和自动化控制。

TCL基本语法与数据结构变量、数据类型与运算符01变量声明与赋值TCL中变量无需事先声明,直接使用`set`命令进行赋值,例如`set x10`。

02数据类型TCL支持多种数据类型,包括整数、浮点数、字符串等。

数据类型之间可以自动转换。

03运算符TCL支持常见的算术运算符(如+、-、*、/)、比较运算符(如==、!=、<、>)和逻辑运算符(如&&、||)。

循环结构TCL提供`for`和`foreach`循环结构,用于重复执行某段代码。

其中,`for`循环可以指定循环次数和步长,`foreach`循环则遍历列表或数组中的元素。

条件语句TCL中使用`if`、`elseif`和`else`关键字构成条件语句,根据条件执行不同的代码块。

Laker TCL 基础训练教材

Laker TCL 基础训练教材

3.
TCL 基本執行單位:程序 procedure
Syntax:proc Name {argument1 argument2 …} { TCL command body } • 傳回的值是這個程序之中的最後一個指令的結果。 • 若在程序之中使用return 指令的話則是傳回你所要傳出來的結果 Example: proc sum { A B } { set r [ expr $A+$B ] return $r } • 使用上面所完成的程序可直接以下列指令呼叫即可 set result [sum 1 2] • 計算出之結果 3 即為傳回的值 注意:proc之中不要再寫入另一個proc
Laker TCL Extensions




Laker會將使用者所有的動作以TCL的語法記錄下來,使用者亦可使用 相同之TCL指令控制Laker,以類似巨集的方式使用,增進工作效率 在 Main Window的訊息欄中可以看到所執行的動作的TCL指令延伸(如 下圖) 你也可以在你的工作目錄下找到 lakerLog的子目錄,所執行過的指令都 會記錄在 <工作目錄>/lakerLog/laker.cmd 如果想要執行此laker.cmd,也可以直接執行command如下: laker –play <工作目錄>/lakerLog/laker.cmd
在 Laker 上執行 TCL

在Laker main window可以直接執行TCL的語法
或在 Laker的命令欄執行 source laker.tcl
Laker 自動啟用 TCL 的方法
• 你可以在啟動 Laker 時就自動啟動 TCL 程式 只要在 laker.rc 的設定檔中加入 TCL 程式即可 ... [SourceTcl] Source1 = ./example.tcl Source2 = /home/abc/leoBlockLabel.tcl PS. 修改laker.rc時,laker必須是在關閉的狀況下

TCL编程语言考试及答案

TCL编程语言考试及答案

TCL编程语言考试及答案本次TCL编程语言考试共分为三个部分,包括选择题、填空题和编程题。

答案均在文末给出,仅供参考。

选择题TCL是哪一种类型的编程语言?A. 解释型语言B. 编译型语言C. 汇编语言D. 机器语言TCL语言的主要用途是什么?A. 网络编程B. 数据库编程C. 图形用户界面编程D. 批处理编程下面哪个命令可以在TCL中输出一条消息?A. printB. putsC. echoD. writeTCL中的变量名称需要以什么符号开头?A. $B. %C. #D. &下面哪个命令可以在TCL中定义一个变量?A. defineB. varC. setD. declare填空题TCL中的______命令可以将一个字符串转换为一个整数。

TCL中的______命令可以用于循环执行一段代码。

在TCL中,使用______可以将一个字符串进行分割。

TCL中使用______命令可以打开一个文件并读取其中的内容。

在TCL中,使用______命令可以将一个字符串转换为列表。

编程题编写一个TCL程序,实现将一个字符串进行反转并输出的功能。

例如,输入"hello world",输出"dlrow olleh"。

编写一个TCL程序,实现将一个列表中的元素进行去重并输出的功能。

例如,输入{1 2 3 3 4 5 5},输出{1 2 3 4 5}。

编写一个TCL程序,实现将一个文件中的所有单词按照字母顺序排序并输出的功能。

例如,输入文件内容为"hello world",输出"dehllloorw"。

答案选择题:1. A 2. C 3. B 4. A 5. C填空题:1. scan 2. while 3. split 4. read 5. list编程题:1.set str "hello world" set len [string length $str] set result "" for {set i $len} {$i >= 0} {incr i -1} { append result [string index $str $i] } puts $resultPlain Textset nums {1 2 3 3 4 5 5} set result {} foreach num $nums { if {$num ni $res ult} { lappend result $num } } puts $resultPlain Textset file [open "filename.txt" r] set content [read $file] close $file set w ords [split $content] set sorted_words [lsort $words] puts [join $sorted_wo rds ""]CopyCaptionPlain Text。

TCL培训教程(全)

TCL培训教程(全)

01
```
02
如果一切顺利,您将在终端中看 到输出`Hello, World!`。
变量、数据类型和运算符
• 变量:TCL中的变量不需要事先声明,可以直接赋值。变量名 可以以字母或下划线开头,后面可以跟字母、数字或下划线。 例如
变量、数据类型和运算符
```tcl
set myVar "Hello"
变量、数据类型和运算符
通过本项目,我们成功构建了一个简易的Web服务器 ,实现了HTTP协议的基础功能,并集成了CGI支持动 态网页生成。 展望与改进
在性能和安全性方面也可以进行进一步优化和提升。
THANKS FOR WATCHING
感谢您的观看
02
讲解使用TCL进行网络数据发送和接收的方法,包括数据的编码
、解码以及错误处理。
Socket事件处理
03
阐述如何处理Socket连接、断开、数据接收等事件,实现实时
网络通信。
图形界面开发(Tk)
Tk基础组件
介绍Tk中常用的基础组件,如标 签、按钮、文本框等,以及它们
的属性和方法。
布局管理
讲解如何使用Tk的布局管理器,如 pack、grid、place等,对界面进 行布局。
实现HTTP协议基础功能
生成HTTP响应 根据请求内容生成相应的HTTP响应。 构造响应行、响应头和响应体,并发送给客户端。
集成CGI支持动态网页生成
CGI概述
CGI(Common Gateway Interface)是一种服务器与外 部程序交互的规范。 通过CGI,服务器可以调用外部程序生成动态内容。
SQL语句执行
阐述如何在TCL中执行SQL语句 ,包括查询、插入、更新和删 除等操作。

TCL教程(中文)(2024)

TCL教程(中文)(2024)

B
C
D
脚本执行过程
详细剖析TCL脚本的执行过程,包括命令 解析、变量替换、执行结果输出等步骤。
控制结构
介绍TCL中的条件判断(if-else)、循环 (foreach、while)等控制结构,以及如 何使用它们来编写逻辑清晰的脚本。
2024/1/29
20
复杂脚本优化技巧分享
代码重用与模块化
讲解如何将重复的代码片段抽象成函数或过 程,实现代码重用和模块化,提高脚本的可 维护性和可读性。
比较运算符
TCL支持比较运算符,如等于(`==`)、不等于(`!=`)、大于 (`>`)、小于(`<`)等。比较运算的结果为布尔值,即真或假 。
逻辑运算符
TCL支持逻辑运算符,如逻辑与(`&&`)、逻辑或(`||`)、逻 辑非(`!`)等。逻辑运算用于组合多个条件,并根据条件的 真假返回相应的结果。
TCL教程(中文)
2024/1/29
1
目录
2024/1/29
• TCL基础知识 • TCL基本语法 • TCL高级特性 • TCL扩展功能 • TCL实例分析 • TCL学习资源推荐
2
TCL基础知识
01
2024/1/29
3
TCL概述
TCL是一种脚本语言
TCL代表“工具命令语言”,是一 种广泛用于嵌入式系统和应用程 序的脚本语言。
I/O流处理
TCL支持I/O流的概念,可以通过管道命令实现不同命令之间的数据传 递和处理。
2024/1/29
14
TCL扩展功能
04
2024/1/29
15
Tk图形界面开发库介绍
Tk概述
Tk是TCL的图形用户界面工具包, 提供了一套丰富的图形控件和布局 管理器,用于创建跨平台的GUI应 用程序。

TCL-TK编程实践

TCL-TK编程实践

第3部分 TK基础23TK基本原理23.1TK中的Hello,World!我们的第一个Tk脚本非常简单。

它创建了一个按钮,当你点击它时,就向标准输出设备打印“Hello,World!”。

在按钮控件上方是一个由窗口管理器提供的标题栏,本例中在X视窗系统中是twm。

23.1.1例23-1 “Hello,World!”Tk程序第一行标识了脚本的解释器:如果此脚本象其它NUIX命令文件那样被调用,则这个特殊的行是必要的,第2节描述了如何设置脚本于不同的平台上。

在这个脚本中有两个TCL命令:一个用来创建按钮,一个用来使其在显示上可见。

bu tton命令创建一个按钮的实例:按钮的名字是.hello。

按钮上的标签是Hello,与此按钮相关联的命令是:pack命令将按钮映射到屏幕上。

并提供了一些堆叠参数,所以在按钮周围有空间。

当你将这两个命令键入wish中时,当button命令给出时,你不会看到任何东西。

然而,在pack命令之后,你将会看到空的主窗口将会收缩到足以容纳按钮和其添充空隙(padd ing)。

包装器的行为在第24和第25章进行深入的讨论。

Tk使用一种基本对象的系统来创建和命令控件。

与每一种小控件(如按钮)相关联的是一个用于创建此种类别控件实例的命令。

当小控件被创建时,一个作用在这个控件实例上的一个新的TCL命令就定义了。

例23-1创建了一个名为.hello的按钮,并且我们可以使用其名字作为一个TCL命令来操纵此按钮。

例如,我们可以使用此按钮高亮几次:或者,我们可以运行与此按钮相关联的命令:Tk有控件类和实例,但是它并不是完全面向对象的。

不可能去对一个控件类派生子类并继承。

相反,Tk,提供了非常灵活的控件,可以通过多种方式调节其外观。

资源数据库可以存储被许多控件共享的配置信息,并且新的类也可以被引入到组资源中。

控件行为通过使用分缓绑定的绑定标签得到共享。

Tk使用部件(composition)来组装共享行为和属性的控件。

tcltk详解——cd和pwd

tcltk详解——cd和pwd

tcltk详解——cd和pwd在tcl中cd命令⽤来改变当前的⼯作⽬录,在需要对⽂件和⽬录进⾏操作时是⼀个必不可少的⼯具,除⾮你愿意把所有的⽂件都⽆序的放在当前⽤户⽬录下。

(以下举例以windows系统下为例)1、cdcd - 改变⼯作⽬录cd ?dirName?改变当前的⼯作⽬录到dirName中,或者进⼊主⽬录,如果没有给出dirName,就返回⼀个空字符串。

注意当前的⼯作⽬录是⼀个进程资源,cd命令改变了解释器和线程的⼯作⽬录。

改变路径到主⽬录下的fred⽤户⽬录:cd ~fred进⼊到当前⽬录的兄弟⽬录lib中:cd ../lib2、pwdpwd - 返回当前⼯作⽬录的绝对路径pwd返回当前⼯作⽬录的绝对路径。

有的时候使⽤exec命令运⾏外部命令的时候需要修改⼯作⽬录,但是保持当前的⼯作路径是⾮常重要的,就需要保存当前的⼯作路径等外部命令运⾏完毕后再修改回来:set tarFile [file normalize somefile.tar]set savedDir [pwd]cd /tmpexec tar -xf $tarFilecd $savedDir当运⾏tclsh时,当前的⽬录可以使⽤pwd来观察⽬前⽤户⽬录,在windows下的⽬录结构:% pwdC:/Documents and Settings/user321其中的user321就是当前⽤户。

注意:在windows下的路径是⽤"\"隔开的,但是tcl返回的结果都是使⽤"/"隔开的,在使⽤的时候需要注意。

如果在敲路径的时候使⽤"\",那么路径就需要这样写"\\",要么直接使⽤⼀个"/",下⾯的例⼦中"E:/tcltk"的效果和"E:\\tcltk"效果相同。

可以使⽤cd命令来修改⼯作⽬录,以绝对路径⽅式进⼊到E盘下的tcltk⽬录下% cd E:/tcltk可以使⽤相对路径来修改⼯作⽬录,⽐如⽬前在E:/tcltk,此⽬录下有work和tools两个⼦⽬录,那么现在进⼊work⽬录的⽅法可以直接使⽤相对路径:% cd work或者% cd ./work"./"代表当前⽬录,在某些情况下可能需要使⽤,⽐如⽂件名以特殊符号"~"开头现在所在的路径为E:/tcltk/work,如果想进⼊work的⼦⽬录就如上⾯所说,那么现在如果想退回到E:/tcltk⽬录下的⽅法呢?使⽤"cd .."就是返回到上级⽬录。

TCL脚本入门教程

TCL脚本入门教程


4 TCL 语法................................................................................................................................................... ...................................................................................................................................................4 简介............................................................................................................................................................ 4 运行环境.................................................................................................................................................... 4 本文约定.................................................................................................................................................... 4 参考资料.....................

Tcl编程教程(详细)

Tcl编程教程(详细)

Tcl编程初步编辑版本: 1.5日期:2004-3-2著者:陈涛上海贝尔阿尔卡特有限公司Tcl 编程初步总目录总目录................................................................................ . (I)例索引................................................................................ .. (IV)表索引................................................................................ .. (VI)图索引................................................................................ . (VII)第 1 章. TCL基本知识................................................................................ .. (1)1.1 什么是T CL................................................................................ (1)1.2 T CL自学工具................................................................................. (1)1.3 T CL软件包................................................................................. (2)1.4 T CL命令格式................................................................................. (2)1.5 T CL脚本文件和SOURCE 命令................................................................................. .. (3)1.6 可执行脚本文件(E XECUTABLEF ILE).............................................................................. . (3)1.7 获得帮助................................................................................. . (4)1.7.1 Windows系统................................................................................. . (4)1.7.2 Unix系统................................................................................. (4)第 2 章. 输出、赋值与替换................................................................................ (5)2.1 PUTS............................................................................... .. (5)2.2 SET & UNSET............................................................................... . (5)2.3 替换................................................................................. .. (6)2.3.1 $.................................................................................. .. (6)2.3.2 []................................................................................. .. (6)2.3.3 " " 和{}................................................................................. .. (6)2.3.4 \.................................................................................. .. (7)第 3 章. 数学表达式与EXPR命令................................................................................ .. (8)3.1 数学和逻辑运算符................................................................................. (8)3.2 数学函数................................................................................. . (8)3.3 数学运算举例................................................................................. . (9)3.4 INCR命令................................................................................. . (9)第 4 章. 字符串................................................................................ (10)4.1 基本命令集................................................................................. (10)4.2 APPEND命令................................................................................. .. (10)4.3 FORMAT命令................................................................................. .. (10)4.3.1 format命令说明................................................................................. (10)4.3.2 format举例................................................................................. .. (11)4.4 SCAN命令................................................................................. .. (12)4.5 BINARY命令................................................................................. (13)4.6 SUBST命令................................................................................. (14)4.7 STRING 命令................................................................................. (15)4.7.1 string 命令列表................................................................................. (15)4.7.2 字符串比较................................................................................. . (16)4.7.3 string match字符串匹配................................................................................. .. (16)4.7.4 字符串替换................................................................................. . (18)4.7.5 字符类别(class)测试................................................................................. . (18)4.7.6 字符串映射................................................................................. . (19)i Tcl 编程初步第 5 章. TCL列表操作................................................................................ (20)5.1 列表命令集................................................................................. (20)5.2 LIST命令................................................................................. . (20)5.3 CONCAT命令................................................................................. . (21)5.4 LAPPEND命令................................................................................. (21)5.5 LLENGTH 命令................................................................................. . (22)5.6 LINDEX命令................................................................................. . (22)5.7 LRANGE命令................................................................................. .. (22)5.8 LINSERT 和LREPLACE命令................................................................................. .. (22)5.9 LSEARCH命令................................................................................. . (23)5.10 LSORT命令................................................................................. .. (24)5.11 JOIN与SPLIT命令................................................................................. . (24)5.12 FOREACH控制结构................................................................................. . (27)第 6 章. 数组................................................................................ .. (28)6.1 数组的定义与格式................................................................................. . (28)6.2 数组变量................................................................................. . (29)6.3 多维数组................................................................................. . (29)6.4 数组操作命令................................................................................. .. (30)6.4.1 array get命令................................................................................. (30)6.4.2 array names命令................................................................................. . (30)6.4.3 遍历数组................................................................................. . (31)6.4.4 用数组定义结构................................................................................. .. (31)第7 章. 控制结构命令................................................................................ .. (32)7.1 IF/ELSE命令................................................................................. . (32)7.2 FOR命令................................................................................. . (33)7.3 WHILE命令................................................................................. .. (33)7.4 BREAK 与CONTINUE命令................................................................................. .. (34)7.5 SWITCH命令................................................................................. (34)7.6 CATCH 命令................................................................................. (35)7.7 ERROR命令................................................................................. . (36)7.8 RETURN 命令................................................................................. (37)7.9 EXIT命令................................................................................. . (37)第8 章. 过程与作用域................................................................................ .. (38)8.1 PROC—过程定义命令................................................................................. .. (38)8.2 作用域................................................................................. (40)8.2.1 过程的作用域................................................................................. (40)8.2.2 变量的作用域................................................................................. (40)8.3 UPVAR命令................................................................................. . (42)8.4 RENAME命令................................................................................. . (44)8.5 特殊变量................................................................................. . (45)8.5.1 命令行参数................................................................................. . (45)8.5.2 env--环境变量数组................................................................................. (45)8.6 EVAL命令................................................................................. (46)8.7 UPLEVEL命令................................................................................. (48)第9 章. 正则表达式(REGULAR EXPRESSIONS) (49)9.1 REGEXP命令................................................................................. .. (49)9.2 REGSUB命令................................................................................. (51)9.3 正则表达式的语法................................................................................. . (52)ii Tcl 编程初步9.3.1 分支(branch)和原子(atom)............................................................................. . (52)9.3.2 基本语法................................................................................. . (52)9.3.2.1 匹配字符.......................................................................................... .. (52)9.3.2.2 限定匹配.......................................................................................... .. (53)9.3.2.3 方括号表达式与字符集.......................................................................................... .. (53)9.3.2.4 匹配分支.......................................................................................... .. (54)9.3.2.5 量词(Qulifier)................................................................................ (54)9.3.2.6 子模式与匹配报告捕获.......................................................................................... .. (55)9.3.2.7 反斜杠引用.......................................................................................... . (56)9.3.2.8 匹配优先级.......................................................................................... . (56)9.3.3 高级正则表达式(AREs)........................................................................... .. (57)9.3.3.1 反斜杠换码(escape)序列.......................................................................................... (57)9.3.3.2 归整元素(collating element).................................................................................... .. (57)9.3.3.3 等价类(equivalence class)...................................................................................... (58)9.3.3.4 字符类(character class)...................................................................................... (58)9.3.3.5 非贪婪量词.......................................................................................... . (59)9.3.3.6 约束量词.......................................................................................... .. (59)9.3.3.7 回退引用.......................................................................................... .. (59)9.3.3.8 前瞻(lookahead)................................................................................. (60)9.3.3.9 换行符敏感的匹配.......................................................................................... . (60)9.3.3.10 嵌入式选项.......................................................................................... . (60)9.3.3.11 扩展语法.......................................................................................... (60)9.3.4 语法小结................................................................................. . (60)9.3.5 其它支持正则表达式的命令................................................................................. .. (60)第10 章. 名字空间................................................................................ (62)10.1 创建名字空间................................................................................. . (62)10.2 用::限定符来使用变量和过程................................................................................. . (62)10.3 名字空间的变量................................................................................. (63)10.4 过程的进口与出口................................................................................. (64)10.5 内省(INTROSPECTION)...................................................................... .. (65)10.6 名字空间命令集................................................................................. (65)第11 章. 跟踪与调试................................................................................ .. (67)11.1 CLOCK命令................................................................................. (67)11.1.1 clock clicks命令................................................................................. (67)11.1.2 clock seconds命令................................................................................. (67)11.1.3 clock format命令................................................................................. (68)11.1.4 clock scan命令................................................................................. . (70)11.2 INFO 命令................................................................................. . (71)11.2.1 info level.............................................................................. (72)11.2.2 info exists............................................................................. (72)11.3 TRACE命令................................................................................. . (73)11.3.1 trace variable........................................................................... (73)11.3.2 trace vdelete............................................................................ (75)11.3.3 trace vinfo.............................................................................. (75)第12 章. 脚本库与软件包................................................................................ . (76)12.1 声明和使用软件包................................................................................. (76)12.1.1 软件包定位................................................................................. . (76)12.1.2 声明软件包命令................................................................................. .. (76)12.1.3 加载软件包命令................................................................................. .. (76)12.1.4 自动加载与软件包索引................................................................................. (77)12.1.5 用链接库提供软件包................................................................................. . (79)iii Tcl 编程初步12.2 PACKAGE命令集................................................................................. . (80)12.3 小结................................................................................. .. (80)第13 章. 文件操作与程序调用................................................................................ (81)13.1 文件操作................................................................................. (81)13.1.1 文件I/O................................................................................ (81)13.1.2 文件系统信息命令................................................................................. .. (82)13.1.2.1 glob命令.......................................................................................... . (83)13.1.2.2 file命令集.......................................................................................... . (83)13.2 程序调用................................................................................. (85)13.2.1 用open命令打开一个进程管道 (85)13.2.2 用exec命令调用程序................................................................................. . (87)13.2.3 pid命令................................................................................. .. (88)第14 章. 套接字与事件驱动编程简介................................................................................ . (89)14.1 套接字编程................................................................................. .. (89)14.1.1 socket命令.................................................................................14.1.1.1 Client端socket命令.......................................................................................... .. (89)14.1.1.2 Server端socket命令选项.......................................................................................... (90)14.1.2 用fconfigure配置套接字................................................................................. . (90)14.1.3 C/S编程举例................................................................................. (90)14.2 事件驱动编程................................................................................. . (93)14.2.1 after命令................................................................................. .. (93)14.2.2 fileevent命令................................................................................. . (96)14.2.3 vwait命令................................................................................. . (96)14.2.4 fconfigure命令................................................................................. . (97)14.2.4.1 fconfigure语法.......................................................................................... .. (97)14.2.4.2 非阻塞I/O......................................................................................... .. (98)14.2.4.3 缓冲.......................................................................................... . (98)参考文献................................................................................ . (100)例索引例 1-1 输出一段字符串的例子.............................................................................例 1-2 source命令的简单例子............................................................................. (3)例 2-1 输出一个词的例子............................................................................. (5)例 2-2 参数定义、赋值与参数值引用............................................................................. (5)例 2-3 嵌套$用做替换操作............................................................................. (6)例 2-4 命令替换[]的例子............................................................................. (6)例 2-5 {}替换的例子............................................................................. (6)例 2-6 \的例子............................................................................. (7)例 2-7 不规范的续行............................................................................. (7)例 3-1 数学运算举例............................................................................. (9)例 4-1 append命令的简单例子............................................................................. (10)例 4-2 位置说明符的例子............................................................................. (11)例 4-3 format命令的简单例子............................................................................. (11)例 4-4 scan命令的简单例子............................................................................. (12)例 4-5 体验binary format 和binary scan的作用 (13)例 4-6 binary命令的简单应用.............................................................................例 4-7 subst命令的简单例子............................................................................. .. (14)例 4-8 string compare 和string equal进行字符串比较的例子 (16)iv Tcl 编程初步例 4-9字符串替换简单例子............................................................................. (18)例 5-1 使用list命令创建列表............................................................................. (20)例 5-2 concat命令的例子............................................................................. (21)例 5-3 lappend命令简单例子............................................................................. (21)例 5-4 llength命令的一个简单例子............................................................................. (22)例 5-5 lindex命令的一个简单例子............................................................................. (22)例 5-6linsert和lreplace命令的例子............................................................................. (22)例 5-7 lsearch命令的简单例子............................................................................. (23)例 5-8 lsearch与lreplace结合删除列表元素 (23)例 5-9 lsort命令简单的例子............................................................................. (24)例 5-10 split命令例子............................................................................. (24)例 5-11空元素与独立字符元素的split例子............................................................................. (24)例 5-12 用ldel删除指定元素............................................................................. (25)例 5-13 根据步长调整MAC地址值............................................................................. (25)例 5-14 foreach的简单例子:依次打印列表元素 (27)例 5-15具有多个值列表的foreach命令处理过程 (27)例 6-1 认识数组............................................................................. (28)例 6-2 混淆普通变量和数组时的错误例子............................................................................. (29)例 6-3 通过替换间接使用数组变量............................................................................. (29)例 6-4 数组和列表互换............................................................................. (30)例 6-5 array names的简单例子............................................................................. (31)例 6-6 遍历数组的一个方法举例............................................................................. (31)例 6-7 用数组来定义结构............................................................................. (31)例 7-1 if/else控制命令的简单例子............................................................................. (32)例 7-2 一个for循环............................................................................. (33)例 7-3 while循环的例子............................................................................. (34)例 7-4 switch 命令的简单例子............................................................................. (34)例 7-5 switch语句中不当注释引起的错误...............................................................................35例 7-6用catch捕获命令错误信息............................................................................. (35)例 7-7 error命令的例子............................................................................. (36)例 7-8用return命令从过程中返回............................................................................. (37)例 8-1 带有默认参数的过程定义............................................................................. (38)例 8-2 不定输入参数过程的例子............................................................................. (39)例 8-3参数名+参数值成对输入的过程定义............................................................................. (39)例 8-4 过程的定义............................................................................. (40)例 8-5 变量的作用域............................................................................. (40)例 8-6 全局变量与局部变量的关系............................................................................. (41)例 8-7 用”::”来声明全局变量............................................................................. (41)例 8-8 upvar命令的例子............................................................................. (42)例 8-9 通过upvar命令来传递数组............................................................................. (44)例 8-10 用rename命令来取消一个命令............................................................................. (44)例 8-11 打印命令行参数信息............................................................................. (45)例 8-12 用eval创建新命令的简单例子............................................................................. (46)例 8-13 动态定义过程............................................................................. (47)例 8-14 uplevel的简单例子............................................................................. (48)例 9-1 regexp的简单例子............................................................................. (50)例 9-2 用regsub进行字符串替换的简单例子 (5)1例 9-3 匹配挂靠的简单例子............................................................................. . (53)例 9-4 字符集匹配的例子............................................................................. .. (53)例 9-5 使用量词*和?不当引起的错误............................................................................. .. (55)v Tcl 编程初步例 9-6子模式捕获............................................................................. (55)例 9-7屏蔽子模式报告............................................................................. (55)例 9-8子模式综合运用的例子:搜索脚本文件中定义的过程 (55)例 9-9 归整元素匹配字符串............................................................................. (58)例 9-10字符类的简单例子............................................................................. (58)例 10-1定义名字空间Counter:....................................................................... (62)例 10-2 动态定义名字空间............................................................................. (62)例 10-3 限定名比较的简单例子............................................................................. (63)例 10-4 名字空间自动处理引用变量的归属............................................................................. (64)例 10-5 过程的进口与出口的简单例子............................................................................. (64)例 10-6 namespace origin命令例子............................................................................. (65)例 11-1计算系统时钟滴答数............................................................................. (67)例 11-2clock format在windows上的简单例子 (69)例 11-3 Tcl识别的系统编码方式............................................................................. (69)例 11-4 消除clock format输出中的乱码............................................................................. (70)例 11-5 用info测试变量是否存在............................................................................. (71)例 11-6 用info level命令控制过程的循环嵌套 (72)例 11-7 用trace variable跟踪变量的简单例子 (73)例 11-8 trace vinfo 的例子............................................................................. . (75)例 12-1 auto_path的内容与操作............................................................................. (76)例 12-2 pkg_mkIndex命令............................................................................. . (77)例 12-3 简单的软件包加载的例子............................................................................. . (78)例 13-1用open命令打开文件,并输入数据.............................................................................82例 13-2 lstat和 stat命令举例............................................................................. . (84)例 13-3 用open命令打开只读进程管道............................................................................. (86)例 13-4 用open命令打开进程管道又一例............................................................................. . (86)例 13-5 用exec处理管道与I/O重定向............................................................................. .. (87)例 13-6 用pid命令检查进程ID............................................................................. . (88)例 14-1基于socket实现的C/S(Client/Server)简单模型 (90)例 14-2 after 命令的简单应用............................................................................. (94)例 14-3vwait命令的简单例子............................................................................. (97)。

tkinter练习题

tkinter练习题

tkinter练习题一、基础操作1. 编写一个简单的tkinter程序,创建一个主窗口,并设置其为"Tkinter Window"。

2. 创建一个按钮,当时,按钮上的文字变为"Clicked"。

3. 创建一个标签,显示文字"Hello, Tkinter!"。

4. 创建一个输入框,用户可以输入文字。

5. 创建一个文本框,用户可以输入多行文本。

6. 创建一个单选按钮,用户可以选择"Male"或"Female"。

7. 创建一个复选框,用户可以选择"Apple"、"Banana"和"Cherry"。

8. 创建一个滑块,用户可以拖动滑块选择一个数值。

9. 创建一个进度条,显示当前进度。

10. 创建一个菜单,包含"File"和"Edit"两个选项。

二、布局管理11. 使用pack布局管理器,将三个按钮水平排列。

12. 使用grid布局管理器,创建一个3x3的按钮矩阵。

13. 使用place布局管理器,将一个按钮放置在窗口的特定位置。

14. 创建一个包含多个组件的窗口,使用不同的布局管理器组合布局。

15. 实现一个登录界面,包含用户名和密码输入框,以及一个登录按钮。

三、事件处理16. 编写一个程序,当用户按下键盘上的任意键时,在窗口中显示该键的名称。

17. 编写一个程序,当用户移动鼠标时,在窗口中显示鼠标的当前位置。

18. 创建一个画布,当用户画布时,在位置绘制一个圆。

19. 创建一个滚动条,与文本框绑定,实现文本框内容的滚动显示。

20. 创建一个计时器,每秒更新一次,显示当前时间。

四、图形绘制21. 在画布上绘制一个矩形。

22. 在画布上绘制一个椭圆。

23. 在画布上绘制一个多边形。

24. 在画布上绘制一个扇形。

原创-TclTk学习笔记

原创-TclTk学习笔记
¾ regexp { ([0-9]+) *([a-z]+)} “ there is 100 apples” total num word →1 ¾ puts “ $total ,$num,$word“ →100 apples ,100,apples ¾ regexp可以设置一些开关(switchs〕,来控制匹配结果:
¾ 正确的做法:file delete {*}[glob *.o]
¾若字符串以{*}开头,后面紧接非空白字符,Tcl 会移除开头的{*}并把剩余的部分做为含有单词 分隔符的语句进行处理
10
语法:参数展开
¾ eval file delete [glob *.o] ¾ set vars {a b c d} eval unset $vars ¾ eval set a 2 ; set b 4
15
变量:查询数组
¾ 对一个数组变量,array可以查询其元素个 数和元素名列表 ¾ set a(1) 100 ¾ set a(2) 200 ¾ set a(3) 300 ¾ array size a →3 ¾ array names a →1 2 3
16
变量:incr和append
¾ incr 加
→1
31
正则表达式
¾ regexp 匹配
¾regexp {^[0-9]+$} 510 →1
¾ regsub 替换
¾regsub there “They live there lives” their x →1
X的值被设置为They live their lives, 语句返回值是1
32
正则表达式:regexp
¾ 也可以使用array unset 移除数组中元素

tcltk编程初步-PPT文档资料

tcltk编程初步-PPT文档资料

秘密 Proprietary Confidential▲
Tcl软件的获取


Tcl的官方网站为:
Linux可以从发行版软件源获取,大部分发行版已经包含了tcl/tk Windows平台上,可以从Activestate下载activetcl软件包
秘密 Proprietary Confidential▲

tcl解释器执行一条命 令的流程如下:


Argument Grouping Value Substitution of nested commands, variables, and backslash escapes Command invocation. It is up to the command to interpret its arguments.
秘密 Proprietary Confidential▲
Tcl命令的格式

Tcl中命令的格式为command arg1 arg2 arg3 …
command是tcl内嵌命令或者tcl函数(Tcl procedure) 命令和参数之间通过空白字符(空格或者TAB)分隔 换行或者分号(Semicolon)用于结束一条命令 除了进行grouping和substitution,tcl不对参数进行解析 例如:set data {1 2 3 4 5} command 第一个参数为data 第二个参数为{1 2 3 4 5} 常见命令 set a 122 创建变量a,值为122

秘密 Proprietary Confidential▲
Tcl的特点


Tcl和tk是解释语言,优点是能够在运行中生成和使用新的脚本, 无须编译;缺点是运行速度比C语言代码编译生成的程序慢。 跨平台,在一个平台上编写的代码几乎可以不用改动即可在另一 个平台上运行。 原生unicode支持 开源软件,遵循BSD授权 易于上手,通过帮助手册和示例代码,即使对tcl语法不熟练,也 能编写复杂的程序

TCL-TK编程实践

TCL-TK编程实践

第3部分 TK基础23TK基本原理23.1TK中的Hello,World!我们的第一个Tk脚本非常简单。

它创建了一个按钮,当你点击它时,就向标准输出设备打印“Hello,World!”。

在按钮控件上方是一个由窗口管理器提供的标题栏,本例中在X视窗系统中是twm。

23.1.1例23-1 “Hello,World!”Tk程序第一行标识了脚本的解释器:如果此脚本象其它NUIX命令文件那样被调用,则这个特殊的行是必要的,第2节描述了如何设置脚本于不同的平台上。

在这个脚本中有两个TCL命令:一个用来创建按钮,一个用来使其在显示上可见。

bu tton命令创建一个按钮的实例:按钮的名字是.hello。

按钮上的标签是Hello,与此按钮相关联的命令是:pack命令将按钮映射到屏幕上。

并提供了一些堆叠参数,所以在按钮周围有空间。

当你将这两个命令键入wish中时,当button命令给出时,你不会看到任何东西。

然而,在pack命令之后,你将会看到空的主窗口将会收缩到足以容纳按钮和其添充空隙(padd ing)。

包装器的行为在第24和第25章进行深入的讨论。

Tk使用一种基本对象的系统来创建和命令控件。

与每一种小控件(如按钮)相关联的是一个用于创建此种类别控件实例的命令。

当小控件被创建时,一个作用在这个控件实例上的一个新的TCL命令就定义了。

例23-1创建了一个名为.hello的按钮,并且我们可以使用其名字作为一个TCL命令来操纵此按钮。

例如,我们可以使用此按钮高亮几次:或者,我们可以运行与此按钮相关联的命令:Tk有控件类和实例,但是它并不是完全面向对象的。

不可能去对一个控件类派生子类并继承。

相反,Tk,提供了非常灵活的控件,可以通过多种方式调节其外观。

资源数据库可以存储被许多控件共享的配置信息,并且新的类也可以被引入到组资源中。

控件行为通过使用分缓绑定的绑定标签得到共享。

Tk使用部件(composition)来组装共享行为和属性的控件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TCL_TK 进阶练习 2
脚本,对 TCl 程序进行初始化。
2.2.3. Tcl 过程 prn 和 setenv
在初始化文件“~/.myapp.tcl”中可定义若干过程(porc) ,每个过程可在以后被调用,相当 一个新的 Tcl 命令。在“~/.myapp.tcl”定义了两个过程 prn 和 setenv。 过程 prn,是对命令 puts 扩展。它的用法为: prn str str str … prn 将把该命令所跟个数不限参数显示于屏幕上。如 prn Welcom you to use my TCL: $argv0 过程 setenv 是仿 csh 设计的一个过程,用于设置或显示环境变量。Tcl 继承 UNIX 的全部环 境变量,并用一维数组 env 表示,环境变量的名作为数组下标,该下标数组元素的值就是相应环 境变量的值。setenv 的用法是: setenv [key [value]] 它可跟 0~2 个参数。参数个数为 2,为设置一个新的环境变量,第一个参数是环境变量的 名,第二个参数是该环境变量的值;参数个数为 1,用于显示与此参数相匹配的所有环境变量; 参数个数为 0,为显示所有环境变量。
2.4.2. 在 C 中对 Tcl 中全局变量的读写
random 命令仍由名为 tclRandom 的 C 函数来实现,由于设计的功能的要求,需要按读写 Tcl 中的全局变量 range。在此函数中从 Tcl 中取变量 range 的值(字符串)由函数 TclGetVar 实 现,再用函数 Tcl_GetInt 将其转换为整数(int range) 。有关程序段为: int range; Tcl_GetInt(interp, Tcl_GetVar(interp, "range", TCL_GLOBAL_ONLY), &range); 当新的随机数 rand 产生之后,一方面将其值写至 interp->result(显示于屏幕) ,接着用函数
2.3. 用户自建 Tcl 命令( tcl2)
Tcl 允许用户用 C 语言创建 Tcl 命令。在 tcl2 中支持的命令 random 就是用户自建的命令。
2.3.1. 自建命令的设计
自建命令由命令名和根据功能需求若干个参数组成。如自建命令 random 设计为: random [limit] 这是一个取随机数的命令,它要求 0~1 个参数。如无参数,则产生一个随机数;如有一个 参数,此参数必须是整数,产生一个在此参数范围内( -|limit| ~ |limit| )的随机数。如给的参数不 是整数或参数个数多于 1 个,则报错。 用此命令产生一个 200 以内的随机数,有两种等价的方法: % random 200 或 % expr [random] % 200 此命令 expr 对其所跟的一“表达式”进行计算,输出结果;此表达式中第 1 项方括号表示 其内中的一条 TCL 命令的执行结果(一个未给定范围的随机数) 。
2.2. Tcl 的用户初始化( tcl1)
2.2.1. 用户初始化函数替换系统初始化函数
在 tcl0.c 中函数 Tcl_Init 是 Tcl 的系统初始化函数,Tcl 的所有功能都在这ห้องสมุดไป่ตู้函数中被规定。 现在用另一个初始化函数 Tcl_AppInit 替换 Tcl_Init,如 /* file: tcl1.c */ int main(int argc, char *argv[]) { Tcl_Main(argc, argv, Tcl_AppInit); exit(0); } 用户初始化函数 Tcl_AppInit 与系统初始化函数 Tcl_Init 类型相同,故具有可替换性。
2.4. C 中读写 Tcl 中变量, tcl3
2.4.1. 递减随机数命令 random 的设计
形式上递减随机数命令 random 仍保持在 tcl2 中定义的随机数命令一样,如 random [limit] 但此 random 较先前 tcl2 中定义的同名命令区别在于,此 random 同 Tcl 的一个全局变量 range 相关。每次执行此命令产生的随机数将自动赋值给该全局变量 range。当命令的参数个数 为 0 时,则产生的随机数较前次产生的随机数要小,除非 range 的值为 0。当命令参数为 1 时, 同先前的 ramdom 一样,产生一个在该参数范围内的随机数。
Tcl-Tk 进阶练习 TclSteps
申 明 1. 综述
本进阶练习包含 9 个单元: tcl0:由 C 程序建立最基本的 Tcl 可执行程序 tcl0。 tcl1:建立的 tcl1 具有自动执行一个 Tcl 脚本,进行初始化。 tcl2:建立的 tcl2,允许用户用 C 语言创建 Tcl 命令。 tcl3:C 程序中读写 Tcl 中全局变量。 tcl4:Tcl 中的全局变量和 C 程序中的变量连接,实现互通,同步改变。 tk0:由 C 程序建立最基本的 Tcl-Tk 可执行程序 tk0。 tk1:建立的 tk1,作为一个 Tcl-Tk 的练习平台。 tk2:建立的 tk2,用按扭调用用户命令的一个实例。 tk3:建立的 tk3,完全的 Tcl-Tk 人机交互界面的一个实例。 所有文件收于在目录~/TclSteps 下。按上述单元分立 9 个子目录。本目录中有一个 Makefile,用 于总控诸子目录的 Make,在本目录中还有.MakeTcl 和.MakeTk 两个文件,分别为下层 tcl#和 tk#两类 子目录的通用 Makefile。
2. Tcl
2.1. 基本 Tcl( tcl0)
2.1.1. tcl0 的生成
用如下 C 语言程序: /* file tcl0.c */ # include <tcl.h> int main(int argc, char *argv[]) { Tcl_Main(argc, argv, Tcl_Init); exit(0); } 经用如下命令编译: gcc -o tcl0 main.c -I/usr/local/include /usr/local/lib/libtcl.a -lsocket 便可生成一个标准的 Tcl 可执行程序 tcl0。 关键之点: 一是源程序 tcl0.c 中包含了头文件 tcl.h; 二是在编译连接时用了 Tcl 标准库 libtcl.a 和另一个标准库 libsocket.a(后者是前者所要求的) 。本程序中只调用了两个库函数 Tcl_Main 和 Tcl_Init。
TCL_TK 进阶练习 3
argv[1]非空。 根据输入,tclRandom 调用 C 库的标准函数产生所要求的随机数,再将它(一个整数)转换 为字符串,写至 interp->result。 此函数是整数型,函数只可返回 TCL_OK(成功)或 TCL_ERROR(失败) 。
2.3.4. 递降随机数的生成, Tcl 过程 Rnadom
2.2.2. 用户初始化之一:用 Tcl_EvalFile 函数读 Tcl 脚本
用户初始化函由用户自建,除必须首先调用系统初始化函数 Tcl_Init,用户具有“无限”的 扩展空间。在 tcl1.c 中,采用了函数 Tcl_EvalFile 读入 Tcl 脚本“~/.myapp.tcl” ,如 char *tcl_RcFileName = " ~/.myapp.tcl"; int Tcl_AppInit(Tcl_Interp *interp) { if (Tcl_Init(interp) == TCL_ERROR) { return TCL_ERROR; } Tcl_EvalFile(interp, tcl_RcFileName); return TCL_OK; } 在 C 中用 Tcl_EvalFile 函数读一个 Tcl 脚本,就相当在交换运行过程中用 source 命令读 Tcl
程序 tcl2 用了本目录下的 myapp.tcl 作为初始化文件,此文件开始部分如下: source $env(HOME)/.myapp.tcl proc Random {} { global range; if {$range <= 0} { set range 5000 } while { $range > 0} { prn $range: [set range [random $range]] } } 第一行中$env(HOME)代表环境变量 HOME 的值,所以本行是读文件” ~/.myapp.tcl” (其中 定义了 proc prn) 。 第二行开始,定义了又一个过程 Random。此过程无需参数。它核心部分是一个 while 循环, 此循环中仅一句: prn $range: [set range [random $range]] 这一句显示两个随机数,冒号左的$range 是 range 原先值;冒号右的两重方括号代表 range 的新值,内层方括号用 random 命令以 range 原先值为上界产生一随机数,接着由外层方括号用 set 命令把刚产生的随机数重新赋值给 range。此循环执行到变量 range 的值降为 0 为止。 过程 Random 要求全局变量 range 的存在,在第一次调用 Random 之前,必先用 set 命令 建立变量 range,如 set range “ ” 进入 Random 后,若检查出 range 的值小于或等于 0,则重置 range 为 5000。
2.3.3. 自建命令的函数的定义
用 C 语言定义的自建命令必须用统一的函数类型,如 int tclRandom(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); 需要说明的是: 此函数的第 3、4 个参数用作为函数的输入,字符串数组 argv,为 tcl2 运行中调用此命令时 的“命令行参数” ,它包含命令名和命令参数;argc 是命令行参数的个数,此例中它不得超过 2; argv[0] 为命令名,在此例中就是” random” ;argv[1] 、argv[2]…为命令的参数,在此例中最多只许
相关文档
最新文档