【Tcl学习笔记】第1章 Tcl和Tk概览-hello world!
目录
- 1.1 环境搭建
- 1.2 使用 Tk 编写hello world
- 1.3 脚本文件
- 1.4 变量与替换
- 1.4 控制结构
- 1.6 关于 Tcl 语言
- 1.7 事件绑定
- 1.8 Tcl/Tk 更多功能
本篇笔记:
- Tcl/Tk环境搭建
- Tcl的基本介绍
- Tk基本介绍
- Tcl的绑定机制
1.1 环境搭建
可以选择使用ActiveState的Tcl发行版:ActivTcl,可免费用于开发目的。
安装:在ActiveState官网下载安装包并安装。不想注册账号可以直接网盘下载(version:ActiveTcl-8.6.9.8609.2-MSWin32-x64)。链接:https://pan.baidu.com/s/1YWpI8gS_SElWuBzmgwPezg 提取码:open
如果安装过anaconda的话会安装好tcl环境,使用tclsh
即可。测试:运行cmd,执行
tclsh85
命令(对应版本,如果是8.6,则输入tclsh86
)出现%开头读取Tcl命令的状态即可。
输入expr 2 + 2
,tclsh输出结果(4)。
- 每一条Tcl命令都会返回一个结果。如果该命令结果无意义,则返回一个空字符串。
- Tcl中所有的值都有字符串表达形式,为了提高效率,减少字符串识别转换,有一部分值会有效率更高的内部表达形式。
1.2 使用 Tk 编写hello world
ActiveTcl安装路径/bin/ 下有一个wish85应用程序,相比tclsh包含了由Tk定义的命令。
编写hello world:
在cmd中执行
wish85
,弹出一个空白窗口与一个控制台窗口:
在控制台输入下面的Tk脚本:
button .b -text "hello world" -command exit grid .b
- ""内表示字符串。
- button和grid 代表命令,后面的是成对出现的配置选项。grid命令要求几何管理器调用栅格管理器(gridder)来管理.b。
- -option value 代表配置选项和配置值。
- .b 代表主组件的子组件
执行后得到如下结果:
点击按钮后,窗口消失。
1.3 脚本文件
把命令写在脚本文件中,文件类型为.tcl。
以上的hello world程序,可以将以下命令保存为hello.tcl,然后用wish85 hello.tcl调用。
# !/usr/local/bin/wish
button .b -text "hello world" -command exit
grid .b
第一行对wish只是一行注释,如果让这个文件成为Unix系统中的可执行文件,那就可以在shell中输入hello.tcl以直接调用这个文件(hello.tcl所在文件夹需要设置环境变量)。
1.4 变量与替换
set a 44
expr $a*4
set b [expr $a*4]
第一条命令将值44赋给a。并返回该变量的值。
第二条命令,$让tcl执行变量替换,即 $a
得到44。
第三条命令,使用[]把命令expr $a*4
的结果赋给b。
- Tcl中变量无需声明。
- Tcl具有转义字符\。
1.4 控制结构
创建一个名为factorial的Tcl过程(procedure),实现非负整数的阶乘:
proc factorial {val} {set result 1while {$val>0} {set result [expr $result*$val]incr val -1}return $result
}
- {}相当于"",区别:1. {}可以嵌套 2. {}内所有内容作为参数传递的过程中不发生替换。
- proc命令的参数:过程的名称,{}内的参数名列表,{}内的过程主体。
- return,while含义类似C语言。
- incr是相加指令。
- 过程内用到的变量是局部变量,过程之外的变量称为全局变量。
注意:在Tcl解释器解析参数的时候它根本不知道这是不是脚本。这种机制的一个后果就是左大括号必须在需要获取该输入参数的命令的同一行。如果左大括号换到了新行,那它前面的换行符就标志着命令的结束。
应用这个过程:
1.6 关于 Tcl 语言
注意:不要从语法的角度来理解Tcl。Tcl包含的只是十多条用于解析参数和执行替换的简单原则。
对于Tcl解释器来说,只能根据 命令 参数 这种模式来解释Tcl脚本。Tcl脚本的具体行为是由所执行的命令确定的。命令决定了应该把一个参数是为它所代表的值,还是变量名,或是要执行的代码块等。这样做的好处是,脚本可以为命令定义全新的控制结构,这一功能是大多数语言不具备的。
1.7 事件绑定
绑定的含义:特定窗口的特定事件发生 与 执行特定的Tcl脚本 的绑定。即为脚本添加图形化界面。
proc factorial {val} {set result 1while {$val>0} {set result [expr $result*$val]incr val -1}return $result
}
entry .value -width 6 -relief sunken -textvariable value
label .description -text "factorial is"
label .result -textvariable result
button .calculate -text "Calculate" -command {set result [factorial $value]}
bind .value <Return> {.calculate flash.calculate invoke
}
grid .value .description .result -padx 1m -pady 1m
grid .calculate - - -padx 1m -pady 1m
执行结果:
应用组件有:
- 输入组件 entry .value(名称) -width 6(宽度显示6字符) -relief sunken(内嵌入窗口) -textvariable value(用来保存输入内容的全局变量)
- 标签组件 label
- 按钮组件 button .calculate -text “Calculate” -command {set result [factorial $value]}(按钮执行的命令)
几何管理:
- grid .value .description .result -padx 1m -pady 1m(从左到右排列并周围加1mm间隔,m-毫米,c-厘米)
- grid .calculate - - -padx 1m -pady 1m(- 表示占位)
绑定
- bind .value(组件名) <Return>(事件说明) {…}(组件中指定事件发生时调用的内容):三个参数,<Return>表示用户通过键盘输入回车。
事件说明符:
事件说明符 | 含义 |
---|---|
<Button-1> | 按下1号鼠标键 |
<1> | <Button-1>的简写 |
<ButtonRelease-1> | 释放1号鼠标键 |
<Double-Button-1> | 双击1号鼠标键 |
<Key-a> | 按下a键 |
<a>或a | <Key-a>的简写 |
<Motion> | 鼠标移动了 |
<B1-Motion> | 1号键按下且移动 |
例子:
在wish58执行下面的命令:
bind . <Motion> {puts "pointer at %x,%y"}
当鼠标移动至空白窗口触发 鼠标移动了 事件,输出箭头的坐标。
1.8 Tcl/Tk 更多功能
- 数组、字典和列表
- 更多的控制结构
- 字符串操作
- 文件访问
- 更多的组件
- 访问其他窗口功能
- 应用程序间通信
- C语言接口
⬇
【Tcl学习笔记】第1章 Tcl和Tk概览-hello world!相关推荐
- CCSP-防火墙学习笔记第6章
CCSP-防火墙学习笔记第6章-Netemu首发 第6章刚刚完成,排版上更具层次化,等第7章完结后,将会重新把1-7章的内容编好目录.作为Cisco防火墙学习笔记的初级篇发布 高级特性将会在第8章讨论 ...
- Programming Entity Framework-dbContext 学习笔记第五章
### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...
- 机器学习理论《统计学习方法》学习笔记:第二章 感知机
<统计学习方法>学习笔记:第二章 感知机 2 感知机 2.1 感知机模型 2.2 感知机学习策略 2.2.1 数据的线性可分性 2.2.2 感知机学习策略 2.3 感知机学习算法 2.3. ...
- Unix原理与应用学习笔记----第六章 文件的基本属性2
Unix原理与应用学习笔记----第六章 文件的基本属性2 改变文件权限命令:chmod 提示:文件或目录创建后,就被赋予一组默认的权限.所有的用户都有读,只有文件的所有者才有写. 相对权限设置 Ch ...
- 《Go语言圣经》学习笔记 第十一章 测试
<Go语言圣经>学习笔记 第十一章 测试 目录 go test 测试函数 测试覆盖率 基准测试 剖析 示例函数 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语 ...
- 《Go语言圣经》学习笔记 第六章 方法
<Go语言圣经>学习笔记 第六章 方法 目录 方法声明 基于指针对象的方法 通过嵌入结构体来扩展类型 方法值和方法表达式 示例:Bit数组 封装 注:学习<Go语言圣经>笔记, ...
- 《Go语言圣经》学习笔记 第五章函数
<Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...
- 《Go语言圣经》学习笔记 第四章 复合数据类型
<Go语言圣经>学习笔记 第四章 复合数据类型 目录 数组 Slice Map 结构体 JSON 文本和HTML模板 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. ...
- 《Go语言圣经》学习笔记 第三章 基础数据类型
<Go语言圣经>学习笔记 第三章 基础数据类型 目录 整型 浮点数 复数 布尔型 字符串 常量 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记, ...
- 计算机网络学习笔记:第二章
文章目录 计算机网络学习笔记:第二章 前言 2.1.应用层协议原理 2.1.1 网络应用程序体系结构 2.1.2 进程通信 2.1.3 可供应用程序使用的运输服务 2.1.4 因特网提供的传输层服务 ...
最新文章
- 教你开发省电的 iOS app(WWDC17 观后)
- Object.defineProperty()方法的用法详解
- 【深度学习】人群距离监测 DeepSOCIAL 最全汉化论文+源码导读
- boost::phoenix::if_相关的测试程序
- Java 8:在新的Nashorn JS引擎中编译Lambda表达式
- --从输入URL到页面展示的详细过程
- 龙将加速浏览器_《使命召唤16》及战区迎来万圣节限时活动,迅游加速器助力流畅体验 18183手机游戏网...
- .NET/CLI元数据中使用的压缩整数
- 【终结版】win10 激活技巧分享
- Tomcat下载及安装(Windows)
- android 优秀项目,11个优秀的Android开发开源项目
- android 网络文件系统,android在手机上的文件系统框架的阐述
- freemarker导出word文档——WordXML格式解析
- Vue2积分商城PC端项目(一)
- 后台怎么接收处理从url 客户端传来的json数据格式
- final修饰符,修饰的变量、方法、类、还有一些相关注意事项
- 【JavaLearn】#(23)JSP相关语法、HTTP协议、Servlet介绍、Servlet生命周期、请求和响应、相对路径、转发和重定向
- 图片验证码识别-自动登录工具开发
- 从Android代码中来记忆23种设计模式
- 五个步骤打通电商平台运营思路