Red Hat Training

A Red Hat training course is available for RHEL 8

第 46 章 Tcl/Tk 入门

46.1. Tcl/Tk 介绍

工具命令语言(Tcl) 是一个动态编程语言。这个语言的解释器以及 C 库由 tcl 软件包提供。

使用与 Tk(Tcl/Tk ) 配对 的 Tcl 可启用跨平台 GUI 应用程序。TKtk 软件包提供。

请注意,Tk 可以引用以下任意一种:

  • 用于多种语言的编程工具包
  • Tk C 库绑定可用于多种语言,如 C、Ruby、Perl 和 Python
  • 一个需要解释器来实例化 Tk 控制台
  • 为特定 Tcl 解释器添加多个新命令的 Tk 扩展

有关 Tcl/Tk 的更多信息,请参阅 Tcl/Tk 手册 或者 Tcl/Tk 文档网页

46.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 压缩
  • 列表处理

    有两个新命令 lmapdict map 可用,允许对 Tcl 容器进行转换。

  • 根据脚本堆栈的频道

    有两个新命令 chan pushchan pop 可用,允许向 I/O 频道添加或删除转换。

Tk 中的主要变化包括:

  • 内置 PNG 镜像支持
  • 忙窗口

    提供了一个新命令 tk busy,它可禁用窗口或 widget 的用户互动并显示忙碌光标。

  • 新的字体选择对话框界面
  • 绿色文本支持
  • 将项移至 canvas 支持

有关 Tcl 8.5 和 Tcl 8.6 之间更改的详细列表,请参阅 Tcl /Tk 8.6 的更改

46.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脚本任务的用户

46.3.1. Tcl 扩展开发者的迁移路径

要使您的代码与 Tcl 8.6 兼容,请使用以下步骤。

流程

  1. 重写代码以使用 interp 结构。例如,如果您的代码读取 interp→errorLine,请重写它以使用以下功能:

    Tcl_GetErrorLine(interp)

    这是必要的,因为 Tcl 8.6 限制对 interp 结构成员的直接访问。

  2. 要使您的代码与 Tcl 8.5Tcl 8.6 兼容,请使用您的 C 或者 C++ 应用程序或包含 Tcl 库的扩展的标头文件中的以下代码片段:

    # include <tcl.h>
    # if !defined(Tcl_GetErrorLine)
    # define Tcl_GetErrorLine(interp) (interp→errorLine)
    # endif

46.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 文件中检查不支持的命令列表。