Red Hat Training

A Red Hat training course is available for RHEL 8

19.7. Tcl/Tk の使用

19.7.1. Tcl/Tk の概要

Tool command language (Tcl) は、動的なプログラミング言語です。この言語のインタープリターと C ライブラリーは、tcl パッケージにより提供されます。

Tk とともに Tcl を使用すると (Tcl/Tk)、プラットフォーム間共通の GUI アプリケーションを作成できます。Tk は、tk パッケージから入手できます。

Tk は次のいずれかを参照できることに注意してください。

  • 複数言語のプログラミングツールキット
  • Tk C ライブラリーバインディングは、複数の言語 (C、Ruby、Perl、Python など) で利用できます。
  • Tk コンソールのインスタンスを作成する wish インタープリター
  • 特定の Tcl インタープリターに新しいコマンドを多数追加する Tk の拡張

Tcl/Tk の詳細は Tcl/Tk マニュアル または Tcl/Tk ドキュメントの Web ページ を参照してください。

19.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 圧縮
  • リスト処理

    新しい 2 つのコマンド lmap および dict map が利用できます。これにより、Tcl コンテナーにおける変換の表現が可能になります。

  • スクリプトにより積み上げられたチャンネル

    新しい 2 つのコマンド chan push および chan pop が利用できるため、I/O チャンネルへ、または I/O チャンネルからの変換を追加または削除できます。

Tk の主な変更は、以下のようになります。

  • ビルドイン PNG イメージサポート
  • ビジーウィンドウ

    新しいコマンド tk busy が利用できます。これは、ウィンドウまたはウィジェットのユーザーとの対話を無効にし、ビジーカーソルが表示されます。

  • 新しいフォント選択ダイアログインターフェイス
  • 角度のついたテキストサポート
  • キャンバスサポートでの移動

Tcl 8.5 から Tcl 8.6 への変更点の詳細は、Changes in Tcl/Tk 8.6 を参照してください。

19.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 を使用してタスクのスクリプトを作成するユーザー

19.7.3.1. Tcl 拡張機能の開発者のための移行パス

コードを Tcl 8.6 と互換性を持たせるには、以下の手順に従います。

手順

  1. コードを書き直し、interp 構造を使用するようにします。たとえば、コードが interp→errorLine を読み込む場合は、これを書き直して以下の関数を使用します。

    Tcl_GetErrorLine(interp)

    Tcl 8.6 は、interp 構造のメンバーへの直接アクセスを制限するため、これが必要です。

  2. コードを、Tcl 8.5 および Tcl 8.6 の両方と互換性を持たせるには、C または C++ アプリケーションのヘッダーファイル、または Tcl ライブラリーを含む拡張に、以下のコードスニペットを使用してください。

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

19.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 ファイルで確認できます。