18.7. Tcl/Tk 入门
18.7.1. Tcl/Tk 简介
工具命令语言(Tcl) 是一种动态编程语言。这个语言的解释器和 C 库一同由 tcl
软件包提供。
一起使用 Tcl 和 Tk (Tcl/Tk) 启用创建跨平台 GUI 应用程序。TK 由 tk
软件包提供。
请注意,Tk 可以引用以下任意一种:
- 用于多种语言的编程工具包
- Tk C 库绑定可用于多种语言,如 C、Ruby、Perl 和 Python
- 一个需要解释器来实例化 Tk 控制台
- 为特定 Tcl 解释器添加多个新命令的 Tk 扩展
有关 Tcl/Tk 的更多信息,请参阅 Tcl/Tk manual 或 Tcl/Tk 文档网页。
18.7.2. Tcl/Tk 8.6 中的显著变化
Red Hat Enterprise Linux 7 使用 Tcl/Tk 8.5。在 Red Hat Enterprise Linux 8 中,Tcl/Tk 版本 8.6 在 Base OS 仓库中提供。
与 Tcl/Tk 8.5 相比,Tcl/Tk 8.6 的主要更改 有:
- 基于对象的编程支持
- 无堆栈评估实施
- 增强的例外处理
- 使用 Tcl 构建并安装的第三方软件包集合
- 启用多线程操作
- 对 SQL 数据库增强脚本的支持
- IPv6 网络支持
- 内置 Zlib 压缩
列表处理
提供了两个新命令,即
lmap
和dict map
,它允许通过 Tcl 容器进行转换。按脚本堆叠频道
有两个新命令
chan push
和chan pop
可用,允许向 I/O 频道添加或删除转换。
Tk 的主要更改包括:
- 内置 PNG 镜像支持
忙碌窗口
新的命令
tk busy
可用,它禁用对窗口或小部件的用户交互,并显示忙碌的光标。- 新的字体选择对话框接口
- Angled 文本支持
- 在 canvas 上移动支持
有关 Tcl 8.5 和 Tcl 8.6 之间的更改的详细列表,请参阅 Tcl/Tk 8.6 中的更改。
18.7.3. 迁移到 Tcl/Tk 8.6
Red Hat Enterprise Linux 7 使用 Tcl/Tk 8.5。在 Red Hat Enterprise Linux 8 中,Tcl/Tk 版本 8.6 在 Base OS 仓库中提供。
本节论述了到 Tcl/Tk 8.6 的迁移路径:
- 开发人员编写 Tcl 扩展或将 Tcl 解释器嵌入到其应用程序中
- 用户使用 Tcl/Tk编写任务
18.7.3.1. Tcl 扩展开发人员迁移路径
要使您的代码与 Tcl 8.6 兼容,请使用以下步骤。
流程
重写代码以使用
interp
结构。例如,如果您的代码读取interp→errorline
,将其重写为使用以下功能:Tcl_GetErrorLine(interp)
这是必要的,因为 Tcl 8.6 限制对
interp
结构成员的直接访问。要使您的代码与 Tcl 8.5 和 Tcl 8.6 兼容,请在包含 Tcl 库的头文件中使用以下代码片段:
# include <tcl.h> # if !defined(Tcl_GetErrorLine) # define Tcl_GetErrorLine(interp) (interp→errorLine) # endif
18.7.3.2. 用户通过 Tcl/Tk 编写任务的迁移路径
在 Tcl 8.6 中,大多数脚本的工作方式与之前的 Tcl 版本相同。
要将代码迁移到 Tcl 8.6,请使用此流程。
流程
在编写可移植代码时,请确保不使用 Tk 8.6 中不再支持的命令:
tkIconList_Arrange tkIconList_AutoScan tkIconList_Btn1 tkIconList_Config tkIconList_Create tkIconList_CtrlBtn1 tkIconList_Curselection tkIconList_DeleteAll tkIconList_Double1 tkIconList_DrawSelection tkIconList_FocusIn tkIconList_FocusOut tkIconList_Get tkIconList_Goto tkIconList_Index tkIconList_Invoke tkIconList_KeyPress tkIconList_Leave1 tkIconList_LeftRight tkIconList_Motion1 tkIconList_Reset tkIconList_ReturnKey tkIconList_See tkIconList_Select tkIconList_Selection tkIconList_ShiftBtn1 tkIconList_UpDown
请注意,您还可以检查
/usr/share/tk8.6/unsupported.tcl
文件中不支持的命令列表。