18.7. Tcl/Tk の使用
18.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 ページ を参照してください。
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 圧縮
リスト処理
新しい 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 を参照してください。
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 の両方と互換性を持たせるには、C または C++ アプリケーションのヘッダーファイル、または 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
ファイルで確認できます。