Tcl-tk-quick-guide
Tcl-概要
Tclは Tool Command Language の短縮形です。 カリフォルニア大学バークレー校のJohn Ousterhoutが設計しました。 スクリプト言語とアプリケーションに組み込まれる独自のインタープリターの組み合わせであり、私たちはそれを使って開発します。
Tclは当初Unix用に開発されました。 その後、Windows、DOS、OS/2、およびMac OSXに移植されました。 Tclは、Bourne Shell(Sh)、C Shell(csh)、Korn Shell(sh)、Perlなどの他のUNIXシェル言語に非常に似ています。
それは、プログラムが他のプログラムと対話する能力を提供し、埋め込み可能なインタープリターとして機能することも目的としています。 元々の目的はプログラムが相互作用できるようにすることでしたが、Tcl/Tkで書かれた本格的なアプリケーションを見つけることができます。
Tclの機能
Tclの機能は次のとおりです-
- 開発時間の短縮。
- TKを統合した強力でシンプルなユーザーインターフェイスキット。
- 一度書くだけで、どこでも実行できます。 Windows、Mac OS X、およびほぼすべてのUnixプラットフォームで実行されます。
- 経験豊富なプログラマーにとっては非常に簡単に始められます。なぜなら、言語は非常に単純であるため、数時間または数日でTclを学習できるからです。
- Tclを使用すると、既存のアプリケーションを簡単に拡張できます。 また、TclをC、C++、JavaからTcl、またはその逆に含めることもできます。
- ネットワーク機能の強力なセットがあります。
- 最後に、無料のオープンソースであり、制限なく商用アプリケーションに使用できます。
アプリケーション
Tclは汎用言語であり、Tclはどこにでもあります。 含まれています、
- 多くの場合データベースに支えられているスケーラブルなWebサイト。
- TclHttpdを使用して高性能Webサーバーを構築します。
- CGIベースのWebサイトでのTcl。
- デスクトップGUIアプリケーション。
- 組み込みアプリケーション。
Tcl-環境設定
ローカル環境のセットアップ
Tcl用に環境を設定する場合は、コンピューターで次の2つのソフトウェアアプリケーションが使用可能である必要があります-
- テキストエディタ
- Tclインタープリター。
テキストエディタ
これは、プログラムの入力に使用されます。 いくつかのテキストエディタの例には、Windowsメモ帳、OS編集コマンド、ブリーフ、イプシロン、EMACS、およびvimまたはviが含まれます。
テキストエディタの名前とバージョンは、オペレーティングシステムによって異なる場合があります。 たとえば、メモ帳はWindowsで使用され、vimまたはviはLinuxまたはUNIXだけでなくWindowsでも使用できます。
テキストエディタで作成するファイルはソースファイルと呼ばれ、プログラムのソースコードが含まれています。 Tclプログラムのソースファイルには、 "。tcl" という拡張子が付いています。
プログラミングを開始する前に、1つのテキストエディターを用意し、コンピュータープログラムを作成し、ファイルに保存し、ビルドし、最後に実行する十分な経験があることを確認してください。
Tclインタープリター
これは、Tclコマンドを入力し、それらを1行ずつ実行できるようにする小さなプログラムです。 完全に実行するコンパイラとは異なり、エラーが発生した場合に備えて、tclファイルの実行を停止します。
次のようにhelloWorld.tclファイルを作成しましょう。 これを最初のプログラムとして使用し、選択したプラットフォームで実行します。
Windowsへのインストール
使用可能なアクティブなTclバイナリのリストから、Windows installerの最新バージョンをダウンロードします。 アクティブなTclコミュニティエディションは、個人での使用は無料です。
ダウンロードした実行可能ファイルを実行してTclをインストールします。これは、画面の指示に従って実行できます。
これで、「cd」コマンドを使用してファイルを含むフォルダーに切り替えて、helloWorld.tclなどのTclファイルをビルドして実行し、次の手順を使用してプログラムを実行できます。
次の出力を確認できます。
C:\ Tclはフォルダーです。サンプルの保存に使用しています。 Tclプログラムを保存したフォルダーに変更できます。
Linuxへのインストール
ほとんどのLinuxオペレーティングシステムにはTclが組み込まれているため、それらのシステムですぐに使用を開始できます。 使用できない場合は、次のコマンドを使用してTcl-Tkをダウンロードおよびインストールできます。
これで、「cd」コマンドを使用してファイルを含むフォルダに切り替えてhelloWorld.tclなどのTclファイルを構築して実行し、次の手順を使用してプログラムを実行できます-
私たちは次の出力を見ることができます-
Debianベースのシステムへのインストール
あなたのOSで利用できない場合は、次のコマンドを使用してTcl-Tkをダウンロードしてインストールすることができます-
これで、「cd」コマンドを使用してファイルを含むフォルダに切り替えてhelloWorld.tclなどのTclファイルを構築して実行し、次の手順を使用してプログラムを実行できます-
私たちは次の出力を見ることができます-
Mac OS Xでのインストール
利用可能なアクティブなTclバイナリのリストから、Mac OS Xの最新バージョンhttps://www.activestate.com/activetcl/downloads[package]をダウンロードします。 アクティブなTclコミュニティエディションは、個人での使用は無料です。
ダウンロードした実行可能ファイルを実行して、アクティブなTclをインストールします。これは、画面の指示に従って実行できます。
今、私たちはビルドし、「cd」を使用してファイルを含むフォルダに切り替えることでhelloWorld.tclと言うTclファイルを実行し、次の手順を使用してプログラムを実行します
私たちは次の出力を見ることができます-
ソースファイルからのインストール
バイナリパッケージが利用できない場合、ソースファイルからインストールするオプションを使用できます。 一般に、WindowsおよびMac OS XではTclバイナリを使用することをお勧めします。そのため、UNIXベースのシステムでのソースのコンパイルのみを以下に示します。
- https://www.tcl.tk/software/tcltk/downloadl [ソースファイル]をダウンロードします。
- ダウンロードしたフォルダーに切り替えた後、次のコマンドを使用して抽出、コンパイル、ビルドを行います。
注-必ず、上記のコマンド1および2でダウンロードしたバージョンにファイル名を変更してください。
Tcl-特殊変数
Tclでは、いくつかの変数を特別な変数として分類し、定義済みの使用法/機能を持っています。 スペシャル変数のリストを以下にリストします。
Sr.No. | Special Variable & Description |
---|---|
1 |
argc 多数のコマンドライン引数を参照します。 |
2 |
argv コマンドライン引数を含むリストを参照します。 |
3 |
argv0 解釈されるファイルのファイル名、またはスクリプトを呼び出す名前を参照します。 |
4 |
env 環境変数である要素の配列を表すために使用されます。 |
5 |
errorCode 最後のTclエラーのエラーコードを提供します。 |
6 |
errorInfo 最後のTclエラーのスタックトレースを提供します。 |
7 |
tcl_interactive これをそれぞれ1と0に設定して、インタラクティブモードと非インタラクティブモードを切り替えるために使用します。 |
8 |
tcl_library 標準Tclライブラリの場所を設定するために使用されます。 |
9 |
tcl_pkgPath パッケージが通常インストールされるディレクトリのリストを提供します。 |
10 |
tcl_patchLevel Tclインタープリターの現在のパッチレベルを参照します。 |
11 |
tcl_platform byteOrder、machine、osVersion、platform、osなどのオブジェクトを持つ要素の配列を表すために使用されます。 |
12 |
tcl_precision 精度、つまり 浮動小数点数を文字列に変換するときに保持する桁数。 デフォルト値は12です。 |
13 |
tcl_prompt1 プライマリプロンプトを指します。 |
14 |
tcl_prompt2 無効なコマンドを含むセカンダリプロンプトを参照します。 |
15 |
tcl_rcFileName ユーザー固有の起動ファイルを提供します。 |
16 |
tcl_traceCompile バイトコードのコンパイルのトレースを制御するために使用されます。 出力なしの場合は0、サマリーの場合は1、詳細の場合は2を使用します。 |
17 |
tcl_traceExec バイトコード実行のトレースを制御するために使用されます。 出力なしの場合は0、サマリーの場合は1、詳細の場合は2を使用します。 |
18 |
tcl_version Tclインタープリターの現在のバージョンを返します。 |
上記の特殊変数には、Tclインタープリターにとって特別な意味があります。
Tcl特殊変数の使用例
特殊変数の例をいくつか見てみましょう。
Tclバージョン
あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-
Tcl環境パス
あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-
Tclパッケージパス
あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-
Tclライブラリ
あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-
Tclパッチレベル
あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-
Tclの精度
あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-
Tclスタートアップファイル
あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-
Tcl-基本構文
Tclの学習は非常に簡単で、最初のTclプログラムの作成を始めましょう!
最初のTclプログラム
簡単なTclプログラムを作成しましょう。 すべてのTclファイルには拡張子、つまり.tclが付きます。 そのため、次のソースコードをtest.tclファイルに配置します。
Tcl環境が正しくセットアップされていると仮定します。ファイルのディレクトリに切り替えてからプログラムを実行し、プログラムを実行してみましょう-
私たちは次の出力を取得します-
Tclプログラムの基本構造を見てみましょう。これにより、Tcl言語の基本的な構成要素を理解しやすくなります。 Tclでは、改行またはセミコロンを使用して、前のコード行を終了します。 ただし、各コマンドに改行を使用している場合、セミコロンは必要ありません。
コメント
コメントは、Tclプログラムのテキストを支援するようなもので、インタープリターはそれらを無視します。 コメントは、先頭にhash _(#)記号を使用して記述できます。
上記のコードが実行されると、次の結果が生成されます-
複数行またはブロックのコメントは、条件「0」の「if」を使用して記述されます。 例を以下に示します。
上記のコードが実行されると、次の結果が生成されます-
インラインコメントは;#を使用します。 例を以下に示します。
上記のコードが実行されると、次の結果が生成されます-
識別子
Tcl識別子は、変数、関数、またはその他のユーザー定義アイテムを識別するために使用される名前です。 識別子は、A〜Zまたはa〜zまたはアンダースコア(_)で始まり、その後にゼロ個以上の文字、アンダースコア、ドル($)、および数字(0〜9)が続きます。
Tclでは、識別子内で@や%などの句読点文字を使用できません。 Tclは*大文字と小文字を区別する* _言語です。 したがって、_Manpower_と_manpower_は、Tclの2つの異なる識別子です。 ここに受け入れ可能な識別子の例のいくつかがあります-
予約語
次のリストは、Tclの予約語のいくつかを示しています。 これらの予約語は、定数、変数、またはその他の識別子名として使用できません。
after | append | array | auto_execok |
auto_import | auto_load | auto_load_index | auto_qualify |
binary | Bgerror | break | catch |
cd | Clock | close | concat |
continue | Dde | default | else |
elseif | Encoding | eof | error |
eval | Exec | exit | expr |
fblocked | Fconfigure | fcopy | file |
fileevent | Flush | for | foreach |
format | Gets | glob | global |
history | If | info | interp |
join | Lappend | lindex | linsert |
list | Llength | load | lrange |
lreplace | Lsearch | lsort | namespace |
open | Package | pid | pkg_mkIndex |
proc | Puts | pwd | read |
regexp | Regsub | rename | resource |
return | Scan | seek | set |
socket | Source | split | string |
subst | Switch | tclLog | tell |
time | Trace | unknown | unset |
update | Uplevel | upvar | variable |
vwait | While |
Tclの空白
コメントが含まれている可能性のある空白のみを含む行は*空白行*と呼ばれ、Tclインタープリターは完全に無視します。
空白は、空白、タブ、改行文字、コメントを記述するためにTclで使用される用語です。 空白はステートメントの一部を別の部分から分離し、インタープリターがステートメントの1つの要素(put、end、次の要素の開始など)を識別できるようにします。 したがって、次のステートメントで-
「puts」と「Hello World!」の間に少なくとも1つの空白文字(通常はスペース)が必要です。通訳者がそれらを区別できるようにします。 一方、次の文で-
上記のコードが実行されると、次の結果が生成されます-
3と+の間、または+の間には空白文字は不要です。および2;ただし、読みやすくするために、必要に応じて一部を含めることができます。
Tcl-コマンド
ご存じのとおり、Tclはツールコマンド言語であり、コマンドは言語の最も重要な部分です。 Tclコマンドは言語に組み込まれ、それぞれに独自の事前定義された機能があります。 これらのコマンドは、言語の予約語を形成し、他の変数の命名には使用できません。 これらのTclコマンドの利点は、これらのコマンドの独自の実装を定義して、元の組み込み機能を置き換えることができることです。
各Tclコマンドは入力を検証し、インタープリターの作業を減らします。
Tclコマンドは実際には単語のリストであり、最初の単語は実行されるコマンドを表します。 次の単語は引数を表します。 単語を1つの引数にグループ化するために、複数の単語を ""または\ {}で囲みます。
Tclコマンドの構文は次のとおりです-
Tclコマンドの簡単な例を見てみましょう-
上記のコードが実行されると、次の結果が生成されます-
上記のコードでは、「puts」がTclコマンドであり、「Hello World」が引数1です。 前に述べたように、「」を使用して2つの単語をグループ化しました。
2つの引数を持つTclコマンドの別の例を見てみましょう-
上記のコードが実行されると、次の結果が生成されます-
上記のコードでは、「puts」はTclコマンド、「stdout」はargument1、「Hello World」はargument2です。 ここで、stdoutはプログラムを標準出力デバイスに印刷させます。
コマンド置換
コマンド置換では、角括弧を使用して角括弧内のスクリプトを評価します。 2つの数字を追加する簡単な例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
可変置換
変数置換では、変数名の前に$が使用され、変数の内容が返されます。 変数に値を設定して出力する簡単な例を以下に示します。
上記のコードが実行されると、次の結果が生成されます-
バックスラッシュの置換
これらは一般に*エスケープシーケンス*と呼ばれます。各バックスラッシュの後に、独自の意味を持つ文字が続きます。 改行置換の簡単な例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
Tcl-データ型
Tclのプリミティブデータ型は文字列であり、多くの場合、文字列のみの言語としてTclで引用符を見つけることができます。 これらのプリミティブデータ型は、リストおよび連想配列の複合データ型を作成します。 Tclでは、データ型は単純なTclオブジェクトだけでなく、ハンドル、グラフィックオブジェクト(主にウィジェット)、I/Oチャネルなどの複雑なオブジェクトも表すことができます。 上記のそれぞれの詳細を見てみましょう。
シンプルなTclオブジェクト
Tclでは、整数、ブール、浮動小数点数、または文字列のいずれかです。 変数を使用する場合、値を直接割り当てることができます。Tclには宣言のステップはありません。 これらのさまざまなタイプのオブジェクトには、内部表現があります。 必要に応じて、あるデータ型を別のデータ型に変換できます。 変数に値を割り当てるための構文は次のとおりです-
上記のコードが実行されると、次の結果が生成されます-
上記のステートメントは、変数名myVariableを作成し、それを文字列として保存しますが、二重引用符は使用していません。 ここで、変数に対して算術演算を行おうとすると、変数は自動的に整数に変わります。 簡単な例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
注意すべき重要な点は、これらの変数にはデフォルト値がなく、使用する前に値を割り当てる必要があるということです。
putsを使用して印刷しようとすると、数値は適切な文字列に変換されます。 内部と外部の2つの表現があるため、Tclは他の言語と比較して複雑なデータ構造を簡単に作成できます。 また、Tclは動的オブジェクトの性質により、より効率的です。
文字列表現
他の言語とは異なり、Tclでは、単一の単語の場合に二重引用符を含める必要はありません。 例は次のとおりです-
上記のコードが実行されると、次の結果が生成されます-
複数の文字列を表現する場合は、二重引用符または中括弧を使用できます。 以下に示されています-
上記のコードが実行されると、次の結果が生成されます-
List
リストは要素のグループにすぎません。 二重引用符または中括弧のいずれかを使用する単語のグループを使用して、単純なリストを表すことができます。 簡単なリストを以下に示します-
上記のコードが実行されると、次の結果が生成されます-
連想配列
連想配列には、必ずしも整数ではないインデックス(キー)があります。 通常、キーと値のペアのように機能する文字列です。 簡単な例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
ハンドル
Tclハンドルは、一般的にファイルとグラフィックスオブジェクトを表すために使用されます。 これらには、ネットワーク要求へのハンドルや、シリアルポート通信、ソケット、I/Oデバイスなどの他のチャネルも含まれます。 以下は、ファイルハンドルが作成される例です。
ファイルの詳細については、リンク:/tcl-tk/tcl_file_io [TclファイルI/O]の章を参照してください。
Tcl-変数
Tclでは、変数宣言の概念はありません。 新しい変数名が見つかると、Tclは新しい変数を定義します。
変数の命名
変数の名前には、任意の文字と長さを含めることができます。 変数を中括弧で囲むことで空白を入れることもできますが、推奨されません。
setコマンドは、変数に値を割り当てるために使用されます。 setコマンドの構文は次のとおりです。
変数のいくつかの例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
上記のプログラムでわかるように、変数の値を取得するために$ variableNameが使用されます。
動的な入力
Tclは動的に型指定された言語です。 必要に応じて、変数の値を必要な型に動的に変換できます。 たとえば、文字列として格納されている数値5は、算術演算を実行するときに数値に変換されます。 以下に示されています-
上記のコードが実行されると、次の結果が生成されます-
数式
上記の例からわかるように、exprは数式を表すために使用されます。 Tclのデフォルトの精度は12桁です。 浮動小数点の結果を取得するには、少なくとも1桁の10進数を追加する必要があります。 簡単な例で上記を説明します。
上記のコードが実行されると、次の結果が生成されます-
上記の例では、3つのケースを見ることができます。 最初のケースでは、被除数と除数は整数であり、結果として整数を取得します。 2番目のケースでは、除数のみが10進数であり、3番目のケースでは、被除数は10進数です。 2番目と3番目の両方のケースで、結果として10進数を取得します。
上記のコードでは、tcl_precision特殊変数を使用して精度を変更できます。 以下に示されています-
上記のコードが実行されると、次の結果が生成されます-
Tcl-演算子
演算子は、特定の数学的または論理的な操作を実行するようコンパイラーに指示する記号です。 Tcl言語は組み込みの演算子が豊富であり、次の種類の演算子を提供します-
- 算術演算子
- 関係演算子
- 論理演算子
- ビット演算子
- 三項演算子
この章では、算術演算子、関係演算子、論理演算子、ビット単位演算子、および3項演算子を1つずつ説明します。
算術演算子
次の表に、Tcl言語でサポートされているすべての算術演算子を示します。 変数「A」が10を保持し、変数「B」が20を保持すると仮定します-
リンク:/tcl-tk/tcl_arithmetic_operators [例を表示]
Operator | Description | Example |
---|---|---|
PLUS | Adds two operands | A PLUS B will give 30 |
- | Subtracts second operand from the first | A - B will give -10 |
* | Multiplies both operands | A* B will give 200 |
/ | Divides numerator by de-numerator | B/A will give 2 |
% | Modulus Operator and remainder of after an integer division | B % A will give 0 |
関係演算子
次の表は、Tcl言語でサポートされているすべての関係演算子を示しています。 変数 A が10を保持し、変数 B が20を保持すると仮定します-
リンク:/tcl-tk/tcl_relational_operators [例を表示]
Operator | Description | Example |
---|---|---|
== | Checks if the values of two operands are equal or not, if yes then condition becomes true. | (A == B) is not true. |
!= | Checks if the values of two operands are equal or not, if values are not equal then condition becomes true. | (A != B) is true. |
> | Checks if the value of left operand is greater than the value of right operand, if yes then condition becomes true. | (A > B) is not true. |
< | Checks if the value of left operand is less than the value of right operand, if yes then condition becomes true. | (A < B) is true. |
>= | Checks if the value of left operand is greater than or equal to the value of right operand, if yes then condition becomes true. | (A >= B) is not true. |
⇐ | Checks if the value of left operand is less than or equal to the value of right operand, if yes then condition becomes true. | (A ⇐ B) is true. |
論理演算子
次の表に、Tcl言語でサポートされているすべての論理演算子を示します。 変数 A が1を保持し、変数 B が0を保持すると仮定します-
リンク:/tcl-tk/tcl_logical_operators [例を表示]
Operator | Description | Example |
---|---|---|
&& | Called Logical AND operator. If both the operands are non-zero, then condition becomes true. | (A && B) is false. |
Called Logical OR Operator. If any of the two operands is non-zero, then condition becomes true. | (A | |
B) is true. | ! | Called Logical NOT Operator. Use to reverses the logical state of its operand. If a condition is true then Logical NOT operator will make false. |
ビット演算子
ビット演算子はビットに対して機能し、ビットごとの操作を実行します。 &、|、および^の真理値表は次のとおりです-
p | q | p & q | p | q |
---|---|---|---|---|
p ^ q | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
0 | 1 | 0 | 0 | 1 |
A = 60であると仮定します。およびB = 13;今バイナリ形式では、次のようになります-
A = 0011 1100
B = 0000 1101
Tcl-決定
意思決定構造では、プログラマーが、プログラムによって評価またはテストされる1つ以上の条件、および条件が真であると判断された場合に実行されるステートメント、およびオプションで条件が実行された場合に実行される他のステートメントを指定する必要があります偽と判断されます。
以下は、ほとんどのプログラミング言語で見られる典型的な意思決定構造の一般的な形式です-
Tcl言語はexprコマンドを内部的に使用するため、exprステートメントを明示的に使用する必要はありません。
Tcl言語は、意思決定ステートメントの次のタイプを提供します-
Sr.No. | Statement & Description |
---|---|
1 |
「if」ステートメントは、ブール式とそれに続く1つ以上のステートメントで構成されます。 |
2 |
「if」ステートメントの後にオプションの「else」ステートメントを続けることができます。これは、ブール式が偽の場合に実行されます。 |
3 |
1つの「if」または「else if」ステートメントを別の「if」または「else if」ステートメント内で使用できます。 |
4 |
|
5 |
1つの switch ステートメントを別の switch ステートメント内で使用できます。 |
は? :オペレーター
条件演算子? :*前の章で、 *if … else ステートメントを置き換えるために使用できます。 それは次の一般的な形式を持っています-
Exp1、Exp2、およびExp3は式です。 コロンの使用と配置に注意してください。
'?の値 式 'は次のように決定されます:Exp1が評価されます。 trueの場合、Exp2が評価され、 '?全体の値になります。 式。 Exp1がfalseの場合、Exp3が評価され、その値が式の値になります。 例を以下に示します。
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
Tcl-ループ
場合によっては、コードのブロックを数回実行する必要があります。 一般に、ステートメントは順番に実行されます。関数の最初のステートメントが最初に実行され、次に2番目のステートメントが実行されます。
プログラミング言語は、より複雑な実行パスを可能にするさまざまな制御構造を提供します。
ループステートメントを使用すると、ステートメントまたはステートメントのグループを複数回実行できます。ほとんどのプログラミング言語では、ループステートメントの一般的な形式は次のとおりです-
Tcl言語は、ループ要件を処理するために次のタイプのループを提供します。
Sr.No. | Loop Type & Description |
---|---|
1 |
特定の条件が真の間、ステートメントまたはステートメントのグループを繰り返します。 ループ本体を実行する前に条件をテストします。 |
2 |
一連のステートメントを複数回実行し、ループ変数を管理するコードを短縮します。 |
3 |
while、for、またはdo..whileループ内で1つ以上のループを使用できます。 |
ループ制御ステートメント
ループ制御ステートメントは、通常のシーケンスから実行を変更します。 実行がスコープを離れると、そのスコープで作成されたすべての自動オブジェクトが破棄されます。
Tclは次の制御ステートメントをサポートしています。
Sr.No. | Control Statement & Description |
---|---|
1 |
ループまたはスイッチステートメントを終了し、ループまたはスイッチの直後のステートメントに実行を転送します。 |
2 |
ループがその本体の残りをスキップし、反復する前にその状態をすぐに再テストします。 |
無限ループ
条件が決して偽にならない場合、ループは無限ループになります。 while ループは伝統的にこの目的に使用されます。 条件式を1のままにして、無限ループを作成できます。
条件式が存在しない場合、trueと見なされます。 Tclプログラマーは、より一般的にwhileループを使用して無限ループを示します。
注-Ctrl&plus;を押すと、無限ループを終了できます。 Cキー。
Tcl-配列
配列は、インデックスを使用した要素のグループの体系的な配置です。 従来の配列の構文を以下に示します。
単純な配列を作成する例を以下に示します。
上記のコードが実行されると、次の結果が生成されます-
配列のサイズ
サイズ配列を計算するための構文を以下に示します。
サイズを印刷する例を以下に示します。
上記のコードが実行されると、次の結果が生成されます-
配列の反復
ただし、配列インデックスは、インデックス1、インデックス10などのように指定された値のように、非連続にすることができます。 ただし、連続している場合は、配列の反復を使用して配列の要素にアクセスできます。 配列の要素を印刷するための単純な配列反復を以下に示します。
上記のコードが実行されると、次の結果が生成されます-
連想配列
Tclでは、本質的にすべての配列は結合的です。 配列は、特定の順序なしで格納および取得されます。 連想配列のインデックスは必ずしも数字ではなく、まばらに設定することができます。 非数値インデックスを使用した連想配列の簡単な例を以下に示します。
上記のコードが実行されると、次の結果が生成されます-
配列のインデックス
配列のインデックスを取得するための構文を以下に示します。
サイズを印刷する例を以下に示します。
上記のコードが実行されると、次の結果が生成されます-
連想配列の反復
配列のインデックスを使用して、連想配列を反復処理できます。 例を以下に示します。
上記のコードが実行されると、次の結果が生成されます-
Tcl-ストリング
Tclのプリミティブデータ型は文字列であり、多くの場合、文字列のみの言語としてTclで引用符を見つけることができます。 これらの文字列には、英数字、数字のみ、ブール値、またはバイナリデータを含めることができます。 Tclは16ビットUnicode文字を使用し、英数字には非ラテン文字、数字または句読点を含む文字を含めることができます。
ブール値は、trueの場合は1、yesまたはtrue、falseの場合は0、no、またはfalseとして表現できます。
文字列表現
他の言語とは異なり、Tclでは、単一の単語の場合に二重引用符を含める必要はありません。 例は次のとおりです-
上記のコードが実行されると、次の結果が生成されます-
複数の文字列を表現する場合は、二重引用符または中括弧を使用できます。 以下に示されています-
上記のコードが実行されると、次の結果が生成されます-
文字列エスケープシーケンス
文字リテラルは、プレーン文字(例: 'x')、エスケープシーケンス(例: '\ t')、またはユニバーサル文字(例: '\ u02C0')です。
Tclには特定の文字があり、バックスラッシュが前に付いている場合は特別な意味を持ち、改行(\ n)またはタブ(\ t)のような表現に使用されます。 ここでは、そのようなエスケープシーケンスコードのいくつかのリストを持っています-
Escape sequence | Meaning |
---|---|
\\ | \ character |
\' | ' character |
\" | " character |
\? | ? character |
\a | Alert or bell |
\b | Backspace |
\f | Form feed |
\n | Newline |
\r | Carriage return |
\t | Horizontal tab |
\v | Vertical tab |
以下は、いくつかのエスケープシーケンス文字を示す例です-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
文字列コマンド
文字列コマンドのサブコマンドのリストは、次の表に記載されています-
Sr.No. | Methods & Description |
---|---|
1 |
string1とstring2を辞書順に比較します。 等しい場合は0、string1がstring2の前にある場合は-1、そうでない場合は1を返します。 |
2 |
string2でstring1が最初に出現するインデックスを返します。 見つからない場合、-1を返します。 |
3 |
インデックスにある文字を返します。 |
4 |
string2でstring1が最後に出現したインデックスを返します。 見つからない場合、-1を返します。 |
5 |
文字列の長さを返します。 |
6 |
文字列がパターンに一致する場合、1を返します。 |
7 |
index1からindex2までの文字列の文字の範囲を返します。 |
8 |
小文字の文字列を返します。 |
9 |
大文字の文字列を返します。 |
10 |
文字列の両端のトリム文字を削除します。 デフォルトのトリム文字は空白です。 |
11 |
文字列の左端のトリム文字を削除します。 デフォルトのトリム文字は空白です。 |
12 |
文字列の左端のトリム文字を削除します。 デフォルトのトリム文字は空白です。 |
13 |
indexの文字を含む単語の後の文字のfindstringのインデックスを返します。 |
14 |
indexの文字を含む単語の最初の文字のfindstringのインデックスを返します。 |
一般的に使用されるTcl文字列サブコマンドの例を以下に示します。
文字列比較
上記のコードをコンパイルして実行すると、次の結果が生成されます-
文字列のインデックス
上記のコードをコンパイルして実行すると、次の結果が生成されます-
ひもの長さ
上記のコードをコンパイルして実行すると、次の結果が生成されます-
取り扱いケース
上記のコードをコンパイルして実行すると、次の結果が生成されます-
トリミング文字
上記のコードをコンパイルして実行すると、次の結果が生成されます-
一致する文字列
上記のコードをコンパイルして実行すると、次の結果が生成されます-
追加コマンド
上記のコードをコンパイルして実行すると、次の結果が生成されます-
フォーマットコマンド
次の表は、Tclで使用可能なフォーマット指定子のリストを示しています-
Specifier | Use |
---|---|
%s | String representation |
%d | Integer representation |
%f | Floating point representation |
%e | Floating point representation with mantissa-exponent form |
%x | Hexa decimal representation |
いくつかの簡単な例を以下に示します-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
スキャンコマンド
スキャンコマンドは、書式指定子に基づいて文字列を解析するために使用されます。 以下に例を示します。
上記のコードをコンパイルして実行すると、次の結果が生成されます-
Tcl-リスト
リストは、Tclで利用可能な基本的なデータ型の1つです。 順序付けされたアイテムのコレクションを表すために使用されます。 同じリストに異なるタイプのアイテムを含めることができます。 さらに、リストには別のリストを含めることができます。
注意する必要がある重要なことは、これらのリストが文字列として完全に表され、必要に応じて個々のアイテムを形成するために処理されることです。 そのため、大きなリストを避け、そのような場合には;配列を使用します。
リストを作成する
リストの一般的な構文は次のとおりです-
いくつかの例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
リストへのアイテムの追加
リストにアイテムを追加するための構文は以下のとおりです-
いくつかの例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
リストの長さ
リストの長さの構文は以下のとおりです-
リストの長さの例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
インデックスのリストアイテム
特定のインデックスでリスト項目を選択するための構文は以下のとおりです-
インデックスのリストアイテムの例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
インデックスにアイテムを挿入
特定のインデックスにリストアイテムを挿入するための構文を以下に示します。
特定のインデックスにリストアイテムを挿入する例を以下に示します。
上記のコードが実行されると、次の結果が生成されます-
インデックスでアイテムを置き換える
特定のインデックスでリスト項目を置き換えるための構文は次のとおりです-
特定のインデックスのリストアイテムを置換する例を以下に示します。
上記のコードが実行されると、次の結果が生成されます-
インデックスでアイテムを設定
特定のインデックスでリスト項目を設定するための構文は以下のとおりです-
特定のインデックスでリスト項目を設定する例は以下のとおりです-
上記のコードが実行されると、次の結果が生成されます-
リストを変数に変換する
変数に値をコピーするための構文は以下のとおりです-
リストを変数に変換する例は以下のとおりです-
上記のコードが実行されると、次の結果が生成されます-
リストを並べ替える
リストをソートするための構文は以下のとおりです-
リストをソートするための例は以下のとおりです-
上記のコードが実行されると、次の結果が生成されます-
Tcl-辞書
辞書は、値をキーにマッピングするための仕組みです。 従来の辞書の構文は以下に示されています-
辞書を作成するためのいくつかの例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
ダクトのサイズ
辞書のサイズを取得するための構文は以下に示されています-
サイズを印刷する例は以下に示されています-
上記のコードが実行されると、次の結果が生成されます-
辞書の反復
キーと辞書の値を印刷するための簡単な辞書の反復を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
Dictのキーの値
dictのキーの値を取得するための構文は次のとおりです-
キーの値を取得するための例は以下のとおりです-
上記のコードが実行されると、次の結果が生成されます-
Dictのすべてのキー
dict内のすべてのキーを取得するための構文を以下に示します-
すべてのキーを印刷する例は以下に示されています-
上記のコードが実行されると、次の結果が生成されます-
Dictのすべての値
dict内のすべての値を取得するための構文を以下に示します-
すべての値を印刷する例は以下に示されています-
上記のコードが実行されると、次の結果が生成されます-
キーは辞書に存在します
キーがdictに存在するかどうかをチェックするための構文は以下に示されています-
キーがdictに存在するかどうかを確認するための例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
Tcl-手順
プロシージャは、特定の再利用可能な機能を提供する一連のコマンドを備えたコードブロックに他なりません。 同じコードが複数の場所で繰り返されるのを避けるために使用されます。 プロシージャは、多くのプログラミング言語で使用されている関数と同等であり、 proc コマンドを使用してTclで使用できます。
簡単な手順を作成する構文は以下に示されています-
手順の簡単な例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
複数の引数を持つプロシージャ
引数を持つプロシージャの例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
可変引数を持つプロシージャ
引数を持つプロシージャの例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
デフォルトの引数を持つプロシージャ
デフォルト引数は、値が提供されない場合に使用できるデフォルト値を提供するために使用されます。 暗黙的な引数と呼ばれることもあるデフォルト引数を持つプロシージャの例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
再帰的手続き
再帰的な手順の例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
Tcl-パッケージ
パッケージは、再利用可能なコード単位を作成するために使用されます。 パッケージは、特定の機能を提供するファイルのコレクションで構成されています。 このファイルのコレクションはパッケージ名で識別され、同じファイルの複数のバージョンを持つことができます。 パッケージは、Tclスクリプトのコレクション、バイナリライブラリ、または両方の組み合わせにすることができます。
パッケージは、名前空間の概念を使用して、変数名とプロシージャ名の衝突を回避します。 次の「link:/tcl-tk/tcl_namespaces [namespace]」チュートリアルで詳細を確認してください。
パッケージ作成
パッケージは、最低2つのファイルを使用して作成できます。 1つのファイルにはパッケージコードが含まれています。 他のファイルには、パッケージを宣言するためのインデックスパッケージファイルが含まれています。
パッケージを作成および使用するための手順のリストを以下に示します。
ステップ1:コードの作成
HelloWorldなどのフォルダー内にパッケージのコードを作成します。 以下に示すコードを使用して、ファイルにHelloWorld.tclという名前を付けます-
ステップ2:パッケージインデックスの作成
tclshを開きます。 HelloWorldディレクトリに切り替え、pkg_mkIndexコマンドを使用して、以下に示すようにインデックスファイルを作成します-
ステップ3:自動パスへのディレクトリの追加
以下に示すように、グローバルリストにパッケージを追加するには、lappendコマンドを使用します-
ステップ4:パッケージの追加
次に、以下に示すようにpackage requireステートメントを使用してプログラムにパッケージを追加します-
ステップ5:手順の呼び出し
今、すべてがセットアップされているので、以下に示すようにプロシージャを呼び出すことができます-
次の結果が得られます-
最初の2つのステップでパッケージを作成します。 パッケージが作成されたら、以下に示すように最後の3つのステートメントを追加することにより、Tclファイルで使用できます-
次の結果が得られます-
Tcl-名前空間
名前空間は、変数とプロシージャをグループ化するために使用される識別子のセットのコンテナです。 名前空間はTclバージョン8.0から利用できます。 名前空間の導入前には、単一のグローバルスコープがありました。 名前空間を使用して、グローバルスコープのパーティションを追加しました。
名前空間の作成
名前空間は、 namespace コマンドを使用して作成されます。 名前空間を作成するための簡単な例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
上記のプログラムでは、変数 myResult とプロシージャ* Add。*を含む名前空間があります。これにより、異なる名前空間で同じ名前の変数とプロシージャを作成できます。
入れ子になった名前空間
Tclでは、名前空間をネストできます。 ネスト名前空間の簡単な例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
名前空間のインポートとエクスポート
前の名前空間の例をご覧ください。多くのスコープ解決演算子を使用していますが、使用するのはより複雑です。 これを回避するには、名前空間をインポートおよびエクスポートします。 以下に例を示します-
上記のコードが実行されると、次の結果が生成されます-
名前空間を忘れる
上記のコードが実行されると、次の結果が生成されます-
Tcl-ファイルI/O
Tclは、組み込みコマンドopen、read、puts、gets、closeの助けを借りてファイル処理をサポートします。
ファイルは一連のバイトを表し、テキストファイルまたはバイナリファイルのどちらでもかまいません。
ファイルを開く
Tclは、openコマンドを使用してTclでファイルを開きます。 ファイルを開くための構文は次のとおりです-
ここで、ファイル名*は文字列リテラルであり、これを使用してファイルに名前を付け、 *accessMode は次のいずれかの値を持つことができます-
Sr.No. | Mode & Description |
---|---|
1 |
r 読み取り用に既存のテキストファイルを開きます。ファイルは存在している必要があります。 これは、accessModeが指定されていない場合に使用されるデフォルトモードです。 |
2 |
w 書き込み用にテキストファイルを開きます。テキストファイルが存在しない場合は、新しいファイルが作成され、存在しない場合は既存のファイルが切り捨てられます。 |
3 |
a 追加モードで書き込むためにテキストファイルを開き、ファイルが存在する必要があります。 ここで、プログラムは既存のファイルコンテンツにコンテンツの追加を開始します。 |
4 |
rPLUS 読み取りと書き込みの両方のためにテキストファイルを開きます。 ファイルはすでに存在している必要があります。 |
5 |
wPLUS 読み取りと書き込みの両方のためにテキストファイルを開きます。 最初にファイルが存在する場合はファイルをゼロ長に切り捨て、存在しない場合はファイルを作成します。 |
6 |
aPLUS 読み取りと書き込みの両方のためにテキストファイルを開きます。 ファイルが存在しない場合は作成します。 読み取りは最初から始まりますが、書き込みは追加のみ可能です。 |
ファイルを閉じる
ファイルを閉じるには、closeコマンドを使用します。 閉じるための構文は次のとおりです-
プログラムによって開かれたファイルは、プログラムがそのファイルの使用を終了したときに閉じる必要があります。 ほとんどの場合、ファイルを明示的に閉じる必要はありません。 Fileオブジェクトが自動的に終了すると、それらは自動的に閉じられます。
ファイルを書く
Putsコマンドは、開いているファイルに書き込むために使用されます。
ファイルへの書き込みの簡単な例を以下に示します。
上記のコードがコンパイルされて実行されると、それが開始されたディレクトリ(プログラムの作業ディレクトリ)に新しいファイル input.txt を作成します。
ファイルを読む
以下は、ファイルから読み取るための簡単なコマンドです-
読み取りおよび書き込みの完全な例を以下に示します-
上記のコードがコンパイルおよび実行されると、前のセクションで作成されたファイルを読み取り、次の結果を生成します-
これは、ファイルの終わりまでファイルを1行ずつ読み込む別の例です-
上記のコードがコンパイルおよび実行されると、前のセクションで作成されたファイルを読み取り、次の結果を生成します-
Tcl-エラー処理
Tclのエラー処理は、 error および catch コマンドの助けを借りて提供されます。 これらの各コマンドの構文は次のとおりです。
エラー構文
上記のエラーコマンド構文では、messageはエラーメッセージであり、infoはグローバル変数errorInfoに設定され、codeはグローバル変数errorCodeに設定されます。
キャッチ構文
上記のcatchコマンド構文では、scriptは実行するコードであり、resultVarNameはエラーまたは結果を保持する変数です。 catchコマンドは、エラーがない場合は0を返し、エラーがある場合は1を返します。
簡単なエラー処理の例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
上記の例でわかるように、独自のカスタムエラーメッセージを作成できます。 同様に、Tclによって生成されたエラーをキャッチすることもできます。 以下に例を示します-
上記のコードが実行されると、次の結果が生成されます-
Tcl-組み込み関数
Tclは、さまざまな操作のための多くの組み込み関数(手順)を提供します。 これには以下が含まれます-
- link:/tcl-tk/tcl_lists [list]処理のための関数。
- link:/tcl-tk/tcl_strings [string]処理のための関数。
- link:/tcl-tk/tcl_arrays [array]処理のための関数。
- link:/tcl-tk/tcl_dictionary [dictionary]処理のための関数。
- link:/tcl-tk/tcl_file_io [ファイルI/O]処理のための関数。
- link:/tcl-tk/tcl_namespaces [namespaces]およびlink:/tcl-tk/tcl_packages [packages。]を作成するための関数
- 数学演算用の関数。 *システム操作用の関数。
数学関数とシステム関数を除く上記のそれぞれについては、前の章で説明しています。 数学およびシステムの組み込み関数を以下に説明します。
数学関数
Tclで利用可能な数学関数は、次の表に記載されています-
Sr.No. | Method & Description |
---|---|
1 |
argの絶対値を計算します。 |
2 |
argのアークコサインを計算します。 |
3 |
argの逆正弦を計算します。 |
4 |
argのアークタンジェントを計算します。 |
5 |
引数の商の逆正接を計算します(y/x)。 |
6 |
数値以上の最小の整数を計算します。 |
7 |
argのコサインを計算します。 |
8 |
argの双曲線余弦を計算します。 |
9 |
argが浮動小数点値であるかどうかを計算し、argを返します。それ以外の場合、argを浮動小数点に変換し、変換された値を返します。 |
10 |
指数関数を計算します(eの累乗)。 |
11 |
arg以下の最大整数を計算します。 |
12 |
xをyで除算した浮動小数点の剰余を計算します。 yが0の場合、エラーが返されます。 |
13 |
直角三角形sqrt(x* x + y *y)の斜辺の長さを計算します。 |
14 |
argがマシンワードと同じ幅の整数値かどうかを計算し、argを返します。それ以外の場合は、argを整数に変換します。 |
15 |
argの自然対数を計算します。 |
16 |
argの10を底とする対数を計算します。 |
17 |
xをy乗した値を計算します。 xが負の場合、yは整数値でなければなりません。 |
18 |
0から1の間の擬似乱数を計算します。 |
19 |
最も近い整数に丸められたargの値を計算します。 |
20 |
argのサインを計算します。 |
21 |
argの双曲線正弦を計算します。 |
22 |
argの平方根を計算します。 argは正でなければなりません。 |
23 |
0から1の間の擬似乱数を計算します。 argは整数でなければならず、randの乱数ジェネレーターのシードをリセットするために使用されます。 |
24 |
argのタンジェントを計算します。 |
25 |
argの双曲線正接を計算します。 |
26 |
argが既に1でない場合、少なくとも64ビット幅の整数値を計算します(argが32ビット数の場合は符号拡張により)。 |
数学関数を使用したいくつかの例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
システム機能
Tclの重要なシステム機能には、
- clock -現在の時刻を秒単位で返す秒関数。
- clock -秒を日付と時刻にフォーマットするフォーマット関数。
- clock -入力文字列をスキャンし、それを秒に変換するスキャン機能。
- open -ファイルを開くために使用される関数。
- exec -システムコマンドを実行するために使用される機能。
- close -ファイルを閉じるために使用される関数。
上記の機能のいくつかの例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
次の表に、日付と時刻のフォーマットに使用できるリスト文字列を示します。
Sr.No. | Format & Description |
---|---|
1 |
%a 短い形式の日。例:日。 |
2 |
%A 完全な形式の日。例:日曜日。 |
3 |
%b 短い形式の月。 |
4 |
%B 完全な形式の月。 |
5 |
%d 月の日。 |
6 |
%j ユリウス日。 |
7 |
%m 数の月。 |
8 |
%y 2桁の年。 |
9 |
%Y 4桁の年。 |
10 |
%H 24時間制の時間。 |
11 |
%I 12時間制の時間。 |
12 |
%M 分。 |
13 |
%S 秒。 |
14 |
%p 午前または午後 |
15 |
%D 日付の数字、mm/dd/yy。 |
16 |
%r 12時間制の時刻。 |
17 |
%R 秒のない24時間時計の時刻。 |
18 |
%T 秒を含む24時間時計の時刻。 |
19 |
%Z GMT、IST、ESTなどのタイムゾーン名。 |
Tcl-正規表現
「regexp」コマンドは、Tclの正規表現と一致するために使用されます。 正規表現は、検索パターンを含む一連の文字です。 複数のルールで構成されており、次の表でこれらのルールと対応する使用法を説明します。
Sr.No. | Rule & Description |
---|---|
1 |
x 完全に一致。 |
2 |
[a-z] a〜zの小文字。 |
3 |
. 任意のキャラクター。 |
4 |
^ 開始文字列は一致する必要があります。 |
5 |
$ 終了文字列は一致する必要があります。 |
6 |
\^ 特殊文字^と一致するバックラッシュシーケンス。同様に、他の文字に使用できます。 |
7 |
() 上記のシーケンスを括弧内に追加して、正規表現を作成します。 |
8 |
x* 先行するxの0回以上の出現に一致する必要があります。 |
9 |
xPLUS 先行するxの1回以上の出現に一致する必要があります。 |
10 |
[a-z]? 先行するxの0または1回の出現に一致する必要があります。 |
11 |
{digit} 前の正規表現の数字と正確に一致します。 0-9を含む数字。 |
12 |
\{digit,} 前の正規表現の3桁以上の出現に一致します。 0-9を含む数字。 |
13 |
\{digit1,digit2} Occurrencesは、前の正規表現のdigit1からdigit2までの範囲に一致します。 |
構文
正規表現の構文は次のとおりです-
ここで、正規表現はコマンドです。 オプションのスイッチについては後ほど説明します。 パターンは、前述のルールです。 検索文字列は、正規表現が実行される実際の文字列です。 完全一致は、一致した正規表現の結果を保持する任意の変数です。 Submatch1からSubMatchnは、サブ一致パターンの結果を保持するオプションのsubMatch変数です。
複雑な例に進む前に、いくつかの簡単な例を見てみましょう。 アルファベットを含む文字列の簡単な例。 他の文字が正規表現に遭遇すると、検索は停止され、返されます。
上記のコードが実行されると、次の結果が生成されます-
複数のパターン
次の例は、複数のパターンを検索する方法を示しています。 これは、アルファベットの後に任意の文字が続き、その後にアルファベットが続くパターン例です。
上記のコードが実行されると、次の結果が生成されます-
サブパターンが複数のパターンを含むことができることを示すために上記のコードの修正版は以下に示されています-
上記のコードが実行されると、次の結果が生成されます-
Regexコマンドのスイッチ
Tclで利用可能なスイッチのリストは、
- nocase -大文字小文字を無視するために使用されます。
- indices -一致した文字の代わりに一致したサブパターンの場所を保存します。
- line -新しい行依存のマッチング。 改行の後の文字を無視します。
- 開始インデックス-検索パターンの開始のオフセットを設定します。
- スイッチの終わりを示します
上記の例では、すべてのアルファベットに対して[A-Z、a-z]を意図的に使用しましたが、以下に示すように-nocaseを簡単に使用できます-
上記のコードが実行されると、次の結果が生成されます-
スイッチを使用した別の例を以下に示します-
上記のコードが実行されると、次の結果が生成されます-
Tk-概要
TkはToolkitを指し、クロスプラットフォームGUIウィジェットを提供します。これは、グラフィカルユーザーインターフェイスの構築に役立ちます。 John OusterhoutによってTclスクリプト言語の拡張機能として開発されました。 Tkは、バージョンが互いに異なるTclとは独立して開発中のままでした。以前は、v8.0でTclと同期して作成されていました。
Tkの機能
Linux、Mac OS、Unix、およびMicrosoft Windowsオペレーティングシステムをサポートするクロスプラットフォームです。
- オープンソースです。
- 高レベルの拡張性を提供します。
- カスタマイズ可能です。
- 設定可能です。
- 多数のウィジェットを提供します。
- Tclだけでなく、他の動的言語でも使用できます。
- GUIはプラットフォーム間で同一に見えます。
Tkで構築されたアプリケーション
成功した大規模なアプリケーションがTcl/Tkで構築されました。
- ダッシュボードソフトユーザーインターフェイス
- リレーショナルDBのフォームGUI
- リレーショナルDBのアドホックGUI
- ソフトウェア/ハードウェアシステム設計
- Xtask-タスク管理
- TclとTkを使った音楽学
- カレンダーアプリ
- Tkメール
- Tkデバッガー
Tk-環境
一般的に、すべてのMacおよびLinux macにはTkがプリインストールされています。 使用できない場合、または最新バージョンが必要な場合は、インストールする必要があります。 WindowsにはTcl/Tkが付属していないため、特定のバイナリを使用してインストールする必要がある場合があります。
Tk通訳者
Tkコマンドを入力し、それらを1行ずつ実行できるようにする小さなプログラムです。 完全に実行するコンパイラとは異なり、エラーが発生した場合に備えて、tclファイルの実行を停止します。
次のようにhelloWorld.tclファイルを作成しましょう。 これを最初のプログラムとして使用し、選択したプラットフォームで実行します。
次のセクションでは、利用可能な各プラットフォームにTcl/Tkをインストールする方法のみを説明します。
Windowsへのインストール
使用可能なアクティブなTcl/Tkバイナリのリストから、Windows installerの最新バージョンをダウンロードします。 アクティブなTcl/Tkコミュニティエディションは個人での使用は無料です。
ダウンロードした実行可能ファイルを実行して、TclとTkをインストールします。これは、画面の指示に従って実行できます。
今、私たちはcdを使用してファイルを含むフォルダに切り替えて、次のステップを使用してhelloWorld.tclなどのTclファイルを構築して実行することができます-
Enterキーを押すと、次のような出力が表示されます-
Linuxへのインストール
ほとんどのLinuxオペレーティングシステムにはTkが組み込まれているため、これらのシステムですぐに使用を開始できます。 使用できない場合は、次のコマンドを使用してTcl-Tkをダウンロードおよびインストールできます。
今、私たちは、* cdコマンド*を使用してファイルを含むフォルダに切り替えてから次のステップを使用してhelloWorld.tclなどのTclファイルを構築して実行することができます-
Enterを押すと、次のような出力が表示されます-
Debianベースのシステムへのインストール
あなたのOSで事前に構築されていない場合には、次のコマンドを使用してTcl-Tkをダウンロードしてインストールすることができます-
今、私たちは* cdコマンド*を使用してファイルを含むフォルダに切り替えてから次の手順を使用して、helloWorld.tclなどのTclファイルを構築して実行することができます-
Enterを押すと、次のような出力が表示されます-
Mac OS Xでのインストール
利用可能なアクティブなTcl/Tkバイナリのリストから、Mac OS Xの最新バージョンhttps://www.activestate.com/activetcl/downloads[package]をダウンロードします。 Active Tclコミュニティエディションは、個人での使用は無料です。
ダウンロードした実行可能ファイルを実行して、アクティブなTclをインストールします。これは、画面の指示に従って実行できます。
今、私たちは、* cdコマンド*を使用してファイルを含むフォルダに切り替えてから次のステップを使用してhelloWorld.tclなどのTclファイルを構築して実行することができます-
Enterキーを押すと、次のような出力が表示されます-
ソースファイルからのインストール
バイナリパッケージが利用できない場合、ソースファイルからインストールするオプションを使用できます。 一般に、WindowsおよびMac OS XにはTkバイナリを使用することをお勧めします。そのため、UNIXベースのシステムでのソースのコンパイルのみを以下に示します-
- https://www.tcl.tk/software/tcltk/downloadl [ソースファイル]をダウンロードします。
- 次に、ダウンロードしたフォルダーに切り替えた後、次のコマンドを使用して抽出、コンパイル、ビルドを行います。
注-必ず、上記のコマンド1および2でダウンロードしたバージョンにファイル名を変更してください。
Tk-特殊変数
Tkでは、いくつかの変数を特別な変数として分類し、事前定義された使用法/機能を持っています。 特殊変数のリストを以下にリストします。
Sr.No. | Special Variable & Description |
---|---|
1 |
tk_library 標準Tkライブラリの場所を設定するために使用されます。 |
2 |
tk_patchLevel Tkインタープリターの現在のパッチレベルを指します。 |
3 |
tk_strictMotif ゼロ以外の場合、TkはMotifのルックアンドフィールに可能な限り忠実に準拠しようとします。 |
4 |
tk_version Tkバージョンを表示します。 |
上記の特殊変数には、Tkインタープリターにとって特別な意味があります。
Tk特殊変数の使用例
特殊変数の例を見てみましょう。
TKバージョン
プログラムを実行すると、次のような出力が得られます。
TKライブラリパス
プログラムを実行すると、次のような出力が得られます。
TKパッチレベル
プログラムを実行すると、次のような出力が得られます。
TK STRICTMOTIF
プログラムを実行すると、次のような出力が得られます。
Tk-ウィジェットの概要
Tkベースのアプリケーションの基本コンポーネントは、ウィジェットと呼ばれます。 Tkでは、「ウィンドウ」と「ウィジェット」はしばしば同じ意味で使用されるため、コンポーネントはウィンドウとも呼ばれます。 Tkは、Tclでグラフィカルアプリケーションを作成するための豊富なグラフィカルコンポーネントセットを提供するパッケージです。
Tkは、ボタンやメニューなどの基本的なGUIウィジェットからデータ表示ウィジェットまで、さまざまなウィジェットを提供します。 ウィジェットは、デフォルトの構成になっているため、使いやすくなっています。
Tkアプリケーションは、任意の数のウィジェットが別のウィジェット内に配置され、それらのウィジェットが別のウィジェット内に配置されるウィジェット階層に従います。 Tkプログラムのメインウィジェットはルートウィジェットと呼ばれ、TkRootクラスの新しいインスタンスを作成することで作成できます。
ウィジェットを作成する
ウィジェットを作成するための構文は次のとおりです。
ここでのタイプは、ボタン、ラベルなどのウィジェットタイプを指します。 引数はオプションであり、各ウィジェットの個々の構文に基づいて必要になります。 オプションの範囲は、各コンポーネントのサイズから書式設定までです。
ウィジェットの命名規則
ウィジェットは、パッケージの命名に似た構造を使用します。 Tkでは、ルートウィンドウにはピリオド(。)が付けられ、ウィンドウ内の要素(たとえば、ボタンには.myButton1という名前)が付けられます。 変数名は、小文字、数字、または句読点(ピリオドを除く)で始まる必要があります。 最初の文字の後に、他の文字は大文字または小文字、数字、または句読点(ピリオドを除く)にすることができます。 小文字を使用してラベルを開始することをお勧めします。
色の命名規則
色は、赤、緑などの名前を使用して宣言できます。 #で表される16進数も使用できます。 16進数の桁数は、3、6、9、または12です。
寸法表記
デフォルトの単位はピクセルであり、寸法を指定しない場合に使用されます。 他の寸法は、インチの場合はi、ミリメートルの場合はm、センチメートルの場合はc、ポイントの場合はpです。
共通オプション
すべてのウィジェットで利用可能な非常に多くの一般的なオプションがあり、それらは以下の表にリストされています-
Sr.No. | Syntax & Description |
---|---|
1 |
-background color ウィジェットの背景色を設定するために使用されます。 |
2 |
-borderwidth width 3D効果でボーダー付きで描画するために使用されます。 |
3 |
-font fontDescriptor ウィジェットのフォントを設定するために使用されます。 |
4 |
-foreground color ウィジェットの前景色を設定するために使用されます。 |
5 |
-height number ウィジェットの高さを設定するために使用されます。 |
6 |
-highlightbackground color ウィジェットに入力フォーカスがない場合に、ウィジェットの周囲に色の長方形を描画するために使用されます。 |
7 |
-highlightcolor color ウィジェットに入力フォーカスがあるときに、ウィジェットの周囲に色の長方形を描画するために使用されます。 |
8 |
-padx number ウィジェットのpadxを設定します。 |
9 |
-pady number ウィジェットの水田を設定します。 |
10 |
-relief condition このウィジェットの3Dレリーフを設定します。 状態は、隆起、沈没、平坦、隆起、中実、または溝のいずれかです。 |
11 |
-text text ウィジェットのテキストを設定します。 |
12 |
-textvariable varName ウィジェットに関連付けられた変数。 ウィジェットのテキストが変更されると、変数はウィジェットのテキストで設定されます。 |
13 |
-width number ウィジェットの幅を設定します。 |
オプションの簡単な例を以下に示します。
上記のプログラムを実行すると、次の出力が得られます。
利用可能なウィジェットのリストは以下に分類されます-
基本的なウィジェット
Sr.No. | Widget & Description |
---|---|
1 |
Label 1行のテキストを表示するためのウィジェット。 |
2 |
Button クリック可能なウィジェットで、アクションをトリガーします。 |
3 |
Entry 入力として1行のテキストを受け入れるために使用されるウィジェット。 |
4 |
Message 複数行のテキストを表示するためのウィジェット。 |
5 |
Text 複数行のテキストを表示し、オプションで編集するためのウィジェット。 |
6 |
Toplevel ウィンドウマネージャによって提供されるすべての境界線と装飾を備えたウィンドウ。 |
レイアウトウィジェット
Sr.No. | Widget & Description |
---|---|
1 |
Frame 他のウィジェットを保持するコンテナウィジェット。 |
2 |
Place 原点の座標と正確なサイズで特定の場所に他のウィジェットを保持するウィジェット。 |
3 |
Pack ウィジェットを親ウィジェットに配置する前にブロックで整理するシンプルなウィジェット。 |
4 |
Grid 異なる方向にパッキングするウィジェットをネストするウィジェット。 |
選択ウィジェット
Sr.No. | Widget & Description |
---|---|
1 |
Radiobutton オン/オフボタンとラベルのセットがあり、そのうちの1つを選択できるウィジェット。 |
2 |
Checkbutton オン/オフボタンとラベルのセットがあり、その多くを選択できるウィジェット。 |
3 |
Menu メニュー項目のホルダーとして機能するウィジェット。 |
4 |
Listbox 1つ以上のセルを選択できるセルのリストを表示するウィジェット。 |
メガウィジェット
Sr.No. | Widget & Description |
---|---|
1 |
Dialog ダイアログボックスを表示するためのウィジェット。 |
2 |
Spinbox ユーザーが数字を選択できるウィジェット。 |
3 |
Combobox エントリと、使用可能な選択肢のリストを組み合わせたウィジェット。 |
4 |
Notebook インデックスタブを使用して、複数のページの1つを切り替えるのに役立つタブ付きウィジェット。 |
5 |
Progressbar ファイルのアップロードなどの長い操作の進行状況を視覚的にフィードバックするウィジェット。 |
6 |
Treeview ツリーの形式でアイテムの階層を表示し、閲覧できるウィジェット。 |
7 |
Scrollbar テキストまたはキャンバスウィジェットなしのスクロールウィジェット。 |
8 |
Scale スライダーを使用して数値を選択するウィジェットを拡大縮小します。 |
その他のウィジェット
Sr.No. | Widget & Description |
---|---|
1 |
Canvas グラフィックスと画像を表示するための描画ウィジェット。 |
これらの各ウィジェットについては、今後の章で説明します。
Tk-基本的なウィジェット
基本的なウィジェットは、ほとんどすべてのTkアプリケーションで使用できる一般的なウィジェットです。 利用可能な基本的なウィジェットのリストは以下のとおりです-
Sr.No. | Widgets & Description |
---|---|
1 |
1行のテキストを表示するためのウィジェット。 |
2 |
クリック可能なウィジェットで、アクションをトリガーします。 |
3 |
入力として1行のテキストを受け入れるために使用されるウィジェット。 |
4 |
複数行のテキストを表示するためのウィジェット。 |
5 |
複数行のテキストを表示し、オプションで編集するためのウィジェット。 |
6 |
新しいトップレベルウィンドウであるフレームを作成するために使用されるウィジェット。 |
基本的なウィジェットを使用して、単純なTkの例を以下に示します-
上記のプログラムを実行すると、次の出力が得られます-
Tk-レイアウトウィジェット
レイアウトウィジェットは、Tkアプリケーションのレイアウトを処理するために使用されます。 フレームウィジェットは他のウィジェットのグループに使用され、配置、パック、グリッドはレイアウトマネージャーであり、ウィンドウへの追加を完全に制御できます。 利用可能なレイアウトウィジェットのリストは以下のとおりです-
Sr.No. | Widgets & Description |
---|---|
1 |
他のウィジェットを保持するコンテナウィジェット。 |
2 |
原点の座標と正確なサイズで特定の場所に他のウィジェットを保持するウィジェット。 |
3 |
ウィジェットを親ウィジェットに配置する前にブロックで整理するシンプルなウィジェット。 |
4 |
異なる方向にパッキングするウィジェットをネストするウィジェット。 |
シンプルなTkの例を、レイアウトウィジェットについて以下に示します-
上記のプログラムを実行すると、次の出力が得られます-
Tk-選択ウィジェット
選択ウィジェットは、Tkアプリケーションのさまざまなオプションを選択するために使用されます。 利用可能な選択ウィジェットのリストは次のとおりです。
Sr.No. | Widgets & Description |
---|---|
1 |
オン/オフボタンとラベルのセットがあり、そのうちの1つを選択できるウィジェット。 |
2 |
オン/オフボタンとラベルのセットがあり、その多くを選択できるウィジェット。 |
3 |
メニュー項目のホルダーとして機能するウィジェット。 |
4 |
1つ以上のセルを選択できるセルのリストを表示するウィジェット。 |
選択ウィジェットを使用して、単純なTkの例を以下に示します-
上記のプログラムを実行すると、次の出力が得られます-
Tk-キャンバスウィジェット
Canvasは、描画領域を提供するために使用されます。 キャンバスウィジェットの構文を以下に示します-
オプション
キャンバスウィジェットで使用可能なオプションは、次の表のとおりです-
Sr.No. | Syntax & Description |
---|---|
1 |
-background color ウィジェットの背景色を設定するために使用されます。 |
2 |
-closeenough distance 表示可能なアイテムにマウスカーソルの近さを設定します。 デフォルトは1.0ピクセルです。 この値は小数である場合があり、正でなければなりません。 |
3 |
-scrollregion boundingBox このキャンバスの総面積の境界ボックス。 |
4 |
-height number ウィジェットの高さを設定するために使用されます。 |
5 |
-width number ウィジェットの幅を設定します。 |
6 |
-xscrollincrement size スクロールが要求されたときに水平にスクロールする量。 |
7 |
-yscrollincrement size スクロールが要求されたときに垂直にスクロールする量。 |
キャンバスウィジェットの簡単な例を以下に示します-
上記のプログラムを実行すると、次の出力が得られます-
Canvasで描画するためのウィジェット
キャンバスでの描画に使用可能なウィジェットのリストは以下のとおりです-
Sr.No. | Widget & Description |
---|---|
1 |
線を引きます。 |
2 |
弧を描きます。 |
3 |
長方形を描画します。 |
4 |
楕円を描画します。 |
5 |
多角形を描画します。 |
6 |
テキストを描画します。 |
7 |
ビットマップを描画します。 |
8 |
画像を描画します。 |
異なるキャンバスウィジェットを使用した例を以下に示します-
上記のプログラムを実行すると、次の出力が得られます-
Tk-メガウィジェット
メガウィジェットには、大規模なTkアプリケーションでしばしば必要とされる多くの複雑なウィジェットが含まれています。 利用可能なメガウィジェットのリストは以下のとおりです-
Sr.No. | Widget & Description |
---|---|
1 |
ダイアログボックスを表示するためのウィジェット。 |
2 |
ユーザーが数字を選択できるウィジェット。 |
3 |
エントリと、使用可能な選択肢のリストを組み合わせたウィジェット。 |
4 |
インデックスタブを使用して、複数のページの1つを切り替えるのに役立つタブ付きウィジェット。 |
5 |
ファイルのアップロードなどの長い操作の進行状況を視覚的にフィードバックするウィジェット。 |
6 |
ツリーの形式でアイテムの階層を表示し、閲覧できるウィジェット。 |
7 |
テキストまたはキャンバスウィジェットなしのスクロールウィジェット。 |
8 |
スライダーを使用して数値を選択するウィジェットを拡大縮小します。 |
いくつかのメガウィジェットを使用した簡単なTkの例を以下に示します。
上記のプログラムを実行すると、次の出力が得られます-
Tk-フォント
テキストの表示をサポートする多くのウィジェットがあります。 これらのほとんどは、フォント属性のオプションを提供します。 フォントを作成するための構文は以下に示されています-
オプション
フォント作成に使用できるオプションは、次の表に以下にリストされています-
Sr.No. | Syntax & Description |
---|---|
1 |
-family familyName フォントファミリーの名前。 |
2 |
-size number フォントのサイズ。 |
3 |
-weight level フォントの太さ。 |
フォント作成の簡単な例を以下に示します-
上記のプログラムを実行すると、次の出力が得られます-
利用可能なすべてのフォントを取得するには、次のコマンドを使用できます-
上記のコマンドを実行すると、次の出力が得られます-
Tk-画像
画像ウィジェットは、画像の作成と操作に使用されます。 イメージを作成するための構文は次のとおりです-
上記の構文では、タイプは写真またはビットマップで、名前は画像識別子です。
オプション
イメージの作成に使用できるオプションは、次の表のとおりです-
Sr.No. | Syntax & Description |
---|---|
1 |
-file fileName 画像ファイル名の名前。 |
2 |
-height number ウィジェットの高さを設定するために使用されます。 |
3 |
-width number ウィジェットの幅を設定します。 |
4 |
-data string Base 64エンコード文字列の画像。 |
画像ウィジェットの簡単な例を以下に示します-
上記のプログラムを実行すると、次の出力が得られます-
画像の利用可能な機能は、次の表に以下に記載されています-
Sr.No. | Syntax & Description |
---|---|
1 |
image delete imageName メモリおよび関連するウィジェットから画像を視覚的に削除します。 |
2 |
image height imageName 画像の高さを返します。 |
3 |
image width imageName 画像の幅を返します。 |
4 |
image type imageName 画像のタイプを返します。 |
5 |
image names メモリ内にある画像のリストを返します。 |
上記の画像ウィジェットコマンドを使用するための簡単な例を以下に示します-
「image delete imgobj」コマンドが実行されると、画像は視覚的におよびメモリから削除されます。 コンソールでは、出力は次のようになります-
Tk-イベント
最も単純な形式のイベントは、コマンドを使用して処理されます。 イベント処理の簡単な例は、ボタンを使用したイベント処理であり、以下に示されています-
上記のプログラムを実行すると、次の出力が得られます-
遅延テキストアニメーションイベントを表示する簡単なプログラムを以下に示します-
プログラムを実行すると、アニメーション化された方法で次の出力が得られます-
遅延後のイベント
遅延後のイベントの構文は次のとおりです-
遅延イベント後に表示する簡単なプログラムを以下に示します-
プログラムを実行すると、1秒後に次の出力が得られます-
以下に示すように、キャンセル後のコマンドを使用してイベントをキャンセルできます-
イベントのバインド
イベントバインディングの構文は次のとおりです-
キーボードイベントの例
私たちはプログラムを実行して文字Xを押すと、次の出力が得られます-
マウスイベントの例
私たちはプログラムを実行し、マウスの左ボタンを押すと、次のような出力が得られます-
ボタンとイベントのリンクの例
プログラムを実行してEnterキーを押すと、次の出力が得られます-
Tk-Windowsマネージャー
ウィンドウマネージャは、トップレベルウィンドウを処理するために使用されます。 ウィンドウのサイズ、位置、およびその他の属性の制御に役立ちます。 Tkでは、 メインウィンドウを参照するために使用されます。 ウィンドウコマンドの構文は以下に示されています-
Tk wmコマンドで利用可能なオプションのリストは、次の表に示されています-
Sr.No. | Syntax & Description |
---|---|
1 |
aspect windowName a b c d a/bとc/dの間にある幅/高さの比率を維持しようとします。 |
2 |
geometry windowName geometryParams ウィンドウのジオメトリを設定するために使用します。 |
3 |
grid windowName w h dx dy グリッドサイズを設定します。 |
4 |
group windowName leaderName leaderNameは、関連するウィンドウのグループのリーダーを提供します。 |
5 |
deiconify windowName 最小化されている場合、画面を通常に戻します。 |
6 |
iconify windowName ウィンドウを最小化します。 |
7 |
state windowName ウィンドウの現在の状態を返します。 |
8 |
withdraw windowName ウィンドウのマップを解除し、メモリ内の詳細を削除します。 |
9 |
iconbitmap windowName image アイコンのビットマップを設定または返します。 |
10 |
iconPhoto windowName image アイコンの写真を設定または返します。 |
11 |
command windowName commandString WM_COMMANDプロパティに起動コマンドを記録します。 |
12 |
protocol windowName arguments プロトコル要求名を処理するコマンドを登録します。これはWM_DELETE_WINDOWである場合があります。 WM_SAVE_YOURSELF、 WM_TAKE_FOCUS。 例:wmプロトコル。 WM_DELETE_WINDOW終了します。 |
13 |
minsize windowName size 最小ウィンドウサイズを決定します。 |
14 |
maxsize windowName size 最大ウィンドウサイズを決定します。 |
15 |
title windowName titleText ウィンドウのタイトルを決定します。 |
16 |
attributes subOptions アルファ、フルスクリーンなどの多くの属性が利用可能です。 |
上記のコマンドのいくつかは、次の例で使用されています-
上記のプログラムを実行すると、次の出力が得られます-
ご覧のとおり、アルファは使用可能な属性の1つです。 一般的に使用されるサブコマンドのリストは以下のとおりです-
Sr.No. | Syntax & Description |
---|---|
1 |
-alpha number ウィンドウのアルファを設定します。 |
2 |
-fullscreen number 数値は、通常画面の場合は0、全画面の場合は1です。 |
3 |
-topmost number ウィンドウが最上位かどうかを設定または返します。値は0または1です。 |
作成ウィンドウ
私たちはトップレベルのコマンドを使用してウィンドウを作成することができ、例を以下に示します-
上記のプログラムを実行すると、次の出力が得られます-
破壊ウィンドウ
destroyコマンドを使用してウィンドウを破棄できます。例を以下に示します-
上記のコマンドは、*。t *という名前のウィンドウを破壊します。
Tk-ジオメトリマネージャー
ジオメトリマネージャは、ウィンドウおよび他のフレームのジオメトリを管理するために使用されます。 これを使用して、ウィンドウとフレームの位置とサイズを処理できます。 リンク:/tcl-tk/tk_layout_widgets [レイアウトウィジェット]は、この目的で使用されます。
位置決めとサイジング
ウィンドウの配置とサイズ変更の構文は次のとおりです-
ここで、wは幅を示し、hは高さを示します。 その後に「&plus;」が続きますまたは、画面上のxの位置を次に示す数字の「-」記号 同様に、次の「&plus;」または番号付きの「-」記号は、画面上のy位置を示します
上記のステートメントの簡単な例を次に示します-。
上記のプログラムを実行すると、次の出力が得られます-
グリッドジオメトリ
グリッドジオメトリの構文は以下に示されています-
列、行、列スパン、または行スパンは、グリッドジオメトリの提供に役立ちます。
上記のステートメントの簡単な例を以下に示します-
上記のプログラムを実行すると、次の出力が得られます-