Tcl-tk-quick-guide

提供:Dev Guides
移動先:案内検索

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ファイルを作成しましょう。 これを最初のプログラムとして使用し、選択したプラットフォームで実行します。

#!/usr/bin/tclsh

puts "Hello World!"

Windowsへのインストール

使用可能なアクティブなTclバイナリのリストから、Windows installerの最新バージョンをダウンロードします。 アクティブなTclコミュニティエディションは、個人での使用は無料です。

ダウンロードした実行可能ファイルを実行してTclをインストールします。これは、画面の指示に従って実行できます。

これで、「cd」コマンドを使用してファイルを含むフォルダーに切り替えて、helloWorld.tclなどのTclファイルをビルドして実行し、次の手順を使用してプログラムを実行できます。

C:\Tcl> tclsh helloWorld.tcl

次の出力を確認できます。

C:\Tcl> helloWorld

C:\ Tclはフォルダーです。サンプルの保存に使用しています。 Tclプログラムを保存したフォルダーに変更できます。

Linuxへのインストール

ほとんどのLinuxオペレーティングシステムにはTclが組み込まれているため、それらのシステムですぐに使用を開始できます。 使用できない場合は、次のコマンドを使用してTcl-Tkをダウンロードおよびインストールできます。

$ yum install tcl tk

これで、「cd」コマンドを使用してファイルを含むフォルダに切り替えてhelloWorld.tclなどのTclファイルを構築して実行し、次の手順を使用してプログラムを実行できます-

$ tclsh helloWorld.tcl

私たちは次の出力を見ることができます-

$ hello world

Debianベースのシステムへのインストール

あなたのOSで利用できない場合は、次のコマンドを使用してTcl-Tkをダウンロードしてインストールすることができます-

$ sudo apt-get install tcl tk

これで、「cd」コマンドを使用してファイルを含むフォルダに切り替えてhelloWorld.tclなどのTclファイルを構築して実行し、次の手順を使用してプログラムを実行できます-

$ tclsh helloWorld.tcl

私たちは次の出力を見ることができます-

$ hello world

Mac OS Xでのインストール

利用可能なアクティブなTclバイナリのリストから、Mac OS Xの最新バージョンhttps://www.activestate.com/activetcl/downloads[package]をダウンロードします。 アクティブなTclコミュニティエディションは、個人での使用は無料です。

ダウンロードした実行可能ファイルを実行して、アクティブなTclをインストールします。これは、画面の指示に従って実行できます。

今、私たちはビルドし、「cd」を使用してファイルを含むフォルダに切り替えることでhelloWorld.tclと言うTclファイルを実行し、次の手順を使用してプログラムを実行します

$ tclsh helloWorld.tcl

私たちは次の出力を見ることができます-

$ hello world

ソースファイルからのインストール

バイナリパッケージが利用できない場合、ソースファイルからインストールするオプションを使用できます。 一般に、WindowsおよびMac OS XではTclバイナリを使用することをお勧めします。そのため、UNIXベースのシステムでのソースのコンパイルのみを以下に示します。

  • https://www.tcl.tk/software/tcltk/downloadl [ソースファイル]をダウンロードします。
  • ダウンロードしたフォルダーに切り替えた後、次のコマンドを使用して抽出、コンパイル、ビルドを行います。
$ tar zxf tcl8.6.1-src.tar.gz
$ cd tcl8.6.1
$ cd unix
$ ./configure —prefix=/opt —enable-gcc
$ make
$ sudo make install

-必ず、上記のコマンド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バージョン

#!/usr/bin/tclsh

puts $tcl_version

あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-

8.6

Tcl環境パス

#!/usr/bin/tclsh

puts $env(PATH)

あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-

/home/cg/root/GNUstep/Tools:/usr/GNUstep/Local/Tools:/usr/GNUstep/
System/Tools:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/webmaster/.local/bin:/
home/webmaster/bin:/usr/local/scriba/bin:/usr/local/smlnj/
bin:/usr/local/bin/std:/usr/local/bin/extra:/usr/local/fantom/bin:/usr/
local/dart/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/opt/mono/
bin:/opt/mono/lib/mono/4.5:/usr/local/bin:.:/usr/libexec/sdcc:/usr/local/
icon-v950/bin:/usr/local/mozart/bin:/opt/Pawn/bin:/opt/jdk1.7.0_75/bin:/
opt/jdk1.7.0_75/jre/bin:/opt/pash/Source/PashConsole/bin/Debug/

Tclパッケージパス

#!/usr/bin/tclsh

puts $tcl_pkgPath

あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-

/usr/lib64/tcl8.6/usr/share/tcl8.6/usr/lib64/tk8.6/usr/share/tk8.6

Tclライブラリ

#!/usr/bin/tclsh

puts $tcl_library

あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-

/usr/share/tcl8.6

Tclパッチレベル

#!/usr/bin/tclsh

puts $tcl_patchLevel

あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-

8.6.6

Tclの精度

#!/usr/bin/tclsh

puts $tcl_precision

あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-

0

Tclスタートアップファイル

#!/usr/bin/tclsh

puts $tcl_rcFileName

あなたがプログラムを実行すると、以下に示すような同様の出力が得られます-

~/.tclshrc

Tcl-基本構文

Tclの学習は非常に簡単で、最初のTclプログラムの作成を始めましょう!

最初のTclプログラム

簡単なTclプログラムを作成しましょう。 すべてのTclファイルには拡張子、つまり.tclが付きます。 そのため、次のソースコードをtest.tclファイルに配置します。

#!/usr/bin/tclsh

puts "Hello, World!"

Tcl環境が正しくセットアップされていると仮定します。ファイルのディレクトリに切り替えてからプログラムを実行し、プログラムを実行してみましょう-

$ tclsh test.tcl

私たちは次の出力を取得します-

Hello, World!

Tclプログラムの基本構造を見てみましょう。これにより、Tcl言語の基本的な構成要素を理解しやすくなります。 Tclでは、改行またはセミコロンを使用して、前のコード行を終了します。 ただし、各コマンドに改行を使用している場合、セミコロンは必要ありません。

コメント

コメントは、Tclプログラムのテキストを支援するようなもので、インタープリターはそれらを無視します。 コメントは、先頭にhash _(#)記号を使用して記述できます。

#!/usr/bin/tclsh

# my first program in Tcl
puts "Hello World!"

上記のコードが実行されると、次の結果が生成されます-

Hello World!

複数行またはブロックのコメントは、条件「0」の「if」を使用して記述されます。 例を以下に示します。

#!/usr/bin/tclsh

if 0 {
   my first program in Tcl program
   Its very simple
}
puts "Hello World!"

上記のコードが実行されると、次の結果が生成されます-

Hello World!

インラインコメントは;#を使用します。 例を以下に示します。

#!/usr/bin/tclsh

puts "Hello World!" ;# my first print in Tcl program

上記のコードが実行されると、次の結果が生成されます-

Hello World!

識別子

Tcl識別子は、変数、関数、またはその他のユーザー定義アイテムを識別するために使用される名前です。 識別子は、A〜Zまたはa〜zまたはアンダースコア(_)で始まり、その後にゼロ個以上の文字、アンダースコア、ドル($)、および数字(0〜9)が続きます。

Tclでは、識別子内で@や%などの句読点文字を使用できません。 Tclは*大文字と小文字を区別する* _言語です。 したがって、_Manpower_と_manpower_は、Tclの2つの異なる識別子です。 ここに受け入れ可能な識別子の例のいくつかがあります-

mohd       zara    abc   move_name  a_123
myname50   _temp   j     a23b9      retVal

予約語

次のリストは、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、次の要素の開始など)を識別できるようにします。 したがって、次のステートメントで-

#!/usr/bin/tclsh

puts "Hello World!"

「puts」と「Hello World!」の間に少なくとも1つの空白文字(通常はスペース)が必要です。通訳者がそれらを区別できるようにします。 一方、次の文で-

#!/usr/bin/tclsh

puts [expr 3 + 2] ;# print sum of the 3 and 2

上記のコードが実行されると、次の結果が生成されます-

5

3と+の間、または+の間には空白文字は不要です。および2;ただし、読みやすくするために、必要に応じて一部を含めることができます。

Tcl-コマンド

ご存じのとおり、Tclはツールコマンド言語であり、コマンドは言語の最も重要な部分です。 Tclコマンドは言語に組み込まれ、それぞれに独自の事前定義された機能があります。 これらのコマンドは、言語の予約語を形成し、他の変数の命名には使用できません。 これらのTclコマンドの利点は、これらのコマンドの独自の実装を定義して、元の組み込み機能を置き換えることができることです。

各Tclコマンドは入力を検証し、インタープリターの作業を減らします。

Tclコマンドは実際には単語のリストであり、最初の単語は実行されるコマンドを表します。 次の単語は引数を表します。 単語を1つの引数にグループ化するために、複数の単語を ""または\ {}で囲みます。

Tclコマンドの構文は次のとおりです-

commandName argument1 argument2 ... argumentN

Tclコマンドの簡単な例を見てみましょう-

#!/usr/bin/tclsh

puts "Hello, world!"

上記のコードが実行されると、次の結果が生成されます-

Hello, world!

上記のコードでは、「puts」がTclコマンドであり、「Hello World」が引数1です。 前に述べたように、「」を使用して2つの単語をグループ化しました。

2つの引数を持つTclコマンドの別の例を見てみましょう-

#!/usr/bin/tclsh

puts stdout "Hello, world!"

上記のコードが実行されると、次の結果が生成されます-

Hello, world!

上記のコードでは、「puts」はTclコマンド、「stdout」はargument1、「Hello World」はargument2です。 ここで、stdoutはプログラムを標準出力デバイスに印刷させます。

コマンド置換

コマンド置換では、角括弧を使用して角括弧内のスクリプトを評価します。 2つの数字を追加する簡単な例を以下に示します-

#!/usr/bin/tclsh

puts [expr 1 + 6 + 9]

上記のコードが実行されると、次の結果が生成されます-

16

可変置換

変数置換では、変数名の前に$が使用され、変数の内容が返されます。 変数に値を設定して出力する簡単な例を以下に示します。

#!/usr/bin/tclsh

set a 3
puts $a

上記のコードが実行されると、次の結果が生成されます-

3

バックスラッシュの置換

これらは一般に*エスケープシーケンス*と呼ばれます。各バックスラッシュの後に、独自の意味を持つ文字が続きます。 改行置換の簡単な例を以下に示します-

#!/usr/bin/tclsh

puts "Hello\nWorld"

上記のコードが実行されると、次の結果が生成されます-

Hello
World

Tcl-データ型

Tclのプリミティブデータ型は文字列であり、多くの場合、文字列のみの言語としてTclで引用符を見つけることができます。 これらのプリミティブデータ型は、リストおよび連想配列の複合データ型を作成します。 Tclでは、データ型は単純なTclオブジェクトだけでなく、ハンドル、グラフィックオブジェクト(主にウィジェット)、I/Oチャネルなどの複雑なオブジェクトも表すことができます。 上記のそれぞれの詳細を見てみましょう。

シンプルなTclオブジェクト

Tclでは、整数、ブール、浮動小数点数、または文字列のいずれかです。 変数を使用する場合、値を直接割り当てることができます。Tclには宣言のステップはありません。 これらのさまざまなタイプのオブジェクトには、内部表現があります。 必要に応じて、あるデータ型を別のデータ型に変換できます。 変数に値を割り当てるための構文は次のとおりです-

#!/usr/bin/tclsh

set myVariable 18
puts $myVariable

上記のコードが実行されると、次の結果が生成されます-

18

上記のステートメントは、変数名myVariableを作成し、それを文字列として保存しますが、二重引用符は使用していません。 ここで、変数に対して算術演算を行おうとすると、変数は自動的に整数に変わります。 簡単な例を以下に示します-

#!/usr/bin/tclsh

set myVariable 18
puts [expr $myVariable + 6 + 9]

上記のコードが実行されると、次の結果が生成されます-

33

注意すべき重要な点は、これらの変数にはデフォルト値がなく、使用する前に値を割り当てる必要があるということです。

putsを使用して印刷しようとすると、数値は適切な文字列に変換されます。 内部と外部の2つの表現があるため、Tclは他の言語と比較して複雑なデータ構造を簡単に作成できます。 また、Tclは動的オブジェクトの性質により、より効率的です。

文字列表現

他の言語とは異なり、Tclでは、単一の単語の場合に二重引用符を含める必要はありません。 例は次のとおりです-

#!/usr/bin/tclsh

set myVariable hello
puts $myVariable

上記のコードが実行されると、次の結果が生成されます-

hello

複数の文字列を表現する場合は、二重引用符または中括弧を使用できます。 以下に示されています-

#!/usr/bin/tclsh

set myVariable "hello world"
puts $myVariable
set myVariable {hello world}
puts $myVariable

上記のコードが実行されると、次の結果が生成されます-

hello world
hello world

List

リストは要素のグループにすぎません。 二重引用符または中括弧のいずれかを使用する単語のグループを使用して、単純なリストを表すことができます。 簡単なリストを以下に示します-

#!/usr/bin/tclsh

set myVariable {red green blue}
puts [lindex $myVariable 2]
set myVariable "red green blue"
puts [lindex $myVariable 1]

上記のコードが実行されると、次の結果が生成されます-

blue
green

連想配列

連想配列には、必ずしも整数ではないインデックス(キー)があります。 通常、キーと値のペアのように機能する文字列です。 簡単な例を以下に示します-

#!/usr/bin/tclsh

set  marks(english) 80
puts $marks(english)
set  marks(mathematics) 90
puts $marks(mathematics)

上記のコードが実行されると、次の結果が生成されます-

80
90

ハンドル

Tclハンドルは、一般的にファイルとグラフィックスオブジェクトを表すために使用されます。 これらには、ネットワーク要求へのハンドルや、シリアルポート通信、ソケット、I/Oデバイスなどの他のチャネルも含まれます。 以下は、ファイルハンドルが作成される例です。

set myfile [open "filename" r]

ファイルの詳細については、リンク:/tcl-tk/tcl_file_io [TclファイルI/O]の章を参照してください。

Tcl-変数

Tclでは、変数宣言の概念はありません。 新しい変数名が見つかると、Tclは新しい変数を定義します。

変数の命名

変数の名前には、任意の文字と長さを含めることができます。 変数を中括弧で囲むことで空白を入れることもできますが、推奨されません。

setコマンドは、変数に値を割り当てるために使用されます。 setコマンドの構文は次のとおりです。

set variableName value

変数のいくつかの例を以下に示します-

#!/usr/bin/tclsh

set variableA 10
set {variable B} test
puts $variableA
puts ${variable B}

上記のコードが実行されると、次の結果が生成されます-

10
test

上記のプログラムでわかるように、変数の値を取得するために$ variableNameが使用されます。

動的な入力

Tclは動的に型指定された言語です。 必要に応じて、変数の値を必要な型に動的に変換できます。 たとえば、文字列として格納されている数値5は、算術演算を実行するときに数値に変換されます。 以下に示されています-

#!/usr/bin/tclsh

set variableA "10"
puts $variableA
set sum [expr $variableA +20];
puts $sum

上記のコードが実行されると、次の結果が生成されます-

10
30

数式

上記の例からわかるように、exprは数式を表すために使用されます。 Tclのデフォルトの精度は12桁です。 浮動小数点の結果を取得するには、少なくとも1桁の10進数を追加する必要があります。 簡単な例で上記を説明します。

#!/usr/bin/tclsh

set variableA "10"
set result [expr $variableA/9];
puts $result
set result [expr $variableA/9.0];
puts $result
set variableA "10.0"
set result [expr $variableA/9];
puts $result

上記のコードが実行されると、次の結果が生成されます-

1
1.1111111111111112
1.1111111111111112

上記の例では、3つのケースを見ることができます。 最初のケースでは、被除数と除数は整数であり、結果として整数を取得します。 2番目のケースでは、除数のみが10進数であり、3番目のケースでは、被除数は10進数です。 2番目と3番目の両方のケースで、結果として10進数を取得します。

上記のコードでは、tcl_precision特殊変数を使用して精度を変更できます。 以下に示されています-

#!/usr/bin/tclsh

set variableA "10"
set tcl_precision 5
set result [expr $variableA/9.0];
puts $result

上記のコードが実行されると、次の結果が生成されます-

1.1111

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

A&B = 0000 1100

A | B = 0011 1101

A ^ B = 0011 0001

Tcl言語でサポートされているビット単位の演算子を次の表にリストします。 変数 *A* が60を保持し、変数 *B* が13を保持すると仮定します-

リンク:/tcl-tk/tcl_bitwise_operators [例を表示]

[cols=",,",options="header",]
|===
|Operator |Description |Example |& |Binary AND Operator copies a bit to the result if it exists in both operands. |(A & B) will give 12, which is 0000 1100 || |Binary OR Operator copies a bit if it exists in either operand. |(A | B) will give 61, which is 0011 1101 |^ |Binary XOR Operator copies the bit if it is set in one operand but not both. |(A ^ B) will give 49, which is 0011 0001 |<< |Binary Left Shift Operator. The left operands value is moved left by the number of bits specified by the right operand. |A << 2 will give 240, which is 1111 0000 |>> |Binary Right Shift Operator. The left operands value is moved right by the number of bits specified by the right operand. |A >> 2 will give 15, which is 0000 1111
|===

=== 三項演算子

リンク:/tcl-tk/tcl_ternary_operator [例を表示]

[cols=",,",options="header",]
|===
|Operator |Description |Example |? : |Ternary |If Condition is true? Then value X : Otherwise value Y
|===

=== Tclでの演算子の優先順位

演算子の優先順位は、式内の用語のグループ化を決定します。 これは、式の評価方法に影響します。 特定の演算子は、他の演算子よりも優先順位が高くなっています。たとえば、乗算演算子は加算演算子よりも優先順位が高くなります。

*例*:x = 7&plus; 3 * 2;ここでは、演算子*の優先順位が&plus;よりも高いため、xには20ではなく13が割り当てられます。したがって、最初に3 * 2で乗算され、7に加算されます。

ここでは、優先順位が最も高い演算子が表の上部に表示され、優先順位が最も低い演算子が下部に表示されます。 式内では、優先順位の高い演算子が最初に評価されます。

リンク:/tcl-tk/tcl_operators_precedence [例を表示]

[cols=",,",options="header",]
|===
|Category |Operator |Associativity |Unary |&plus; - |Right to left |Multiplicative |*/% |Left to right |Additive |&plus; - |Left to right |Shift |<< >> |Left to right |Relational |< <= > >= |Left to right |Bitwise AND |& |Left to right |Bitwise XOR |^ |Left to right |Bitwise OR || |Left to right |Logical AND |&& |Left to right |Logical OR ||| |Left to right |Ternary |?: |Right to left
|===

Tcl-決定

意思決定構造では、プログラマーが、プログラムによって評価またはテストされる1つ以上の条件、および条件が真であると判断された場合に実行されるステートメント、およびオプションで条件が実行された場合に実行される他のステートメントを指定する必要があります偽と判断されます。

以下は、ほとんどのプログラミング言語で見られる典型的な意思決定構造の一般的な形式です-

意思決定

Tcl言語はexprコマンドを内部的に使用するため、exprステートメントを明示的に使用する必要はありません。

Tcl言語は、意思決定ステートメントの次のタイプを提供します-

Sr.No. Statement & Description
1

if statement

「if」ステートメントは、ブール式とそれに続く1つ以上のステートメントで構成されます。

2

if…​else statement

「if」ステートメントの後にオプションの「else」ステートメントを続けることができます。これは、ブール式が偽の場合に実行されます。

3

nested if statements

1つの「if」または「else if」ステートメントを別の「if」または「else if」ステートメント内で使用できます。

4

switch statement

  • switch* ステートメントを使用すると、変数を値のリストと等しいかどうかをテストできます。
5

nested switch statements

1つの switch ステートメントを別の switch ステートメント内で使用できます。

は? :オペレーター

条件演算子? :*前の章で、 *if …​ else ステートメントを置き換えるために使用できます。 それは次の一般的な形式を持っています-

Exp1 ? Exp2 : Exp3;

Exp1、Exp2、およびExp3は式です。 コロンの使用と配置に注意してください。

'?の値 式 'は次のように決定されます:Exp1が評価されます。 trueの場合、Exp2が評価され、 '?全体の値になります。 式。 Exp1がfalseの場合、Exp3が評価され、その値が式の値になります。 例を以下に示します。

#!/usr/bin/tclsh

set a 10;
set b [expr $a == 1 ? 20: 30]
puts "Value of b is $b\n"
set b [expr $a == 10 ? 20: 30]
puts "Value of b is $b\n"

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

Value of b is 30
Value of b is 20

Tcl-ループ

場合によっては、コードのブロックを数回実行する必要があります。 一般に、ステートメントは順番に実行されます。関数の最初のステートメントが最初に実行され、次に2番目のステートメントが実行されます。

プログラミング言語は、より複雑な実行パスを可能にするさまざまな制御構造を提供します。

ループステートメントを使用すると、ステートメントまたはステートメントのグループを複数回実行できます。ほとんどのプログラミング言語では、ループステートメントの一般的な形式は次のとおりです-

ループアーキテクチャ

Tcl言語は、ループ要件を処理するために次のタイプのループを提供します。

Sr.No. Loop Type & Description
1

while loop

特定の条件が真の間、ステートメントまたはステートメントのグループを繰り返します。 ループ本体を実行する前に条件をテストします。

2

for loop

一連のステートメントを複数回実行し、ループ変数を管理するコードを短縮します。

3

nested loops

while、for、またはdo..whileループ内で1つ以上のループを使用できます。

ループ制御ステートメント

ループ制御ステートメントは、通常のシーケンスから実行を変更します。 実行がスコープを離れると、そのスコープで作成されたすべての自動オブジェクトが破棄されます。

Tclは次の制御ステートメントをサポートしています。

Sr.No. Control Statement & Description
1

break statement

ループまたはスイッチステートメントを終了し、ループまたはスイッチの直後のステートメントに実行を転送します。

2

continue statement

ループがその本体の残りをスキップし、反復する前にその状態をすぐに再テストします。

無限ループ

条件が決して偽にならない場合、ループは無限ループになります。 while ループは伝統的にこの目的に使用されます。 条件式を1のままにして、無限ループを作成できます。

while {1} {
   puts "This loop will run forever."
}

条件式が存在しない場合、trueと見なされます。 Tclプログラマーは、より一般的にwhileループを使用して無限ループを示します。

-Ctrl&plus;を押すと、無限ループを終了できます。 Cキー。

Tcl-配列

配列は、インデックスを使用した要素のグループの体系的な配置です。 従来の配列の構文を以下に示します。

set ArrayName(Index) value

単純な配列を作成する例を以下に示します。

#!/usr/bin/tclsh

set languages(0) Tcl
set languages(1) "C Language"
puts $languages(0)
puts $languages(1)

上記のコードが実行されると、次の結果が生成されます-

Tcl
C Language

配列のサイズ

サイズ配列を計算するための構文を以下に示します。

[array size variablename]

サイズを印刷する例を以下に示します。

#!/usr/bin/tclsh

set languages(0) Tcl
set languages(1) "C Language"
puts  [array size languages]

上記のコードが実行されると、次の結果が生成されます-

2

配列の反復

ただし、配列インデックスは、インデックス1、インデックス10などのように指定された値のように、非連続にすることができます。 ただし、連続している場合は、配列の反復を使用して配列の要素にアクセスできます。 配列の要素を印刷するための単純な配列反復を以下に示します。

#!/usr/bin/tclsh

set languages(0) Tcl
set languages(1) "C Language"
for { set index 0 }  { $index < [array size languages] }  { incr index } {
   puts "languages($index) : $languages($index)"
}

上記のコードが実行されると、次の結果が生成されます-

languages(0) : Tcl
languages(1) : C Language

連想配列

Tclでは、本質的にすべての配列は結合的です。 配列は、特定の順序なしで格納および取得されます。 連想配列のインデックスは必ずしも数字ではなく、まばらに設定することができます。 非数値インデックスを使用した連想配列の簡単な例を以下に示します。

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
puts  $personA(Name)
puts  $personA(Age)

上記のコードが実行されると、次の結果が生成されます-

Dave
14

配列のインデックス

配列のインデックスを取得するための構文を以下に示します。

[array names variablename]

サイズを印刷する例を以下に示します。

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
puts [array names personA]

上記のコードが実行されると、次の結果が生成されます-

Age Name

連想配列の反復

配列のインデックスを使用して、連想配列を反復処理できます。 例を以下に示します。

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
foreach index [array names personA] {
   puts "personA($index): $personA($index)"
}

上記のコードが実行されると、次の結果が生成されます-

personA(Age): 14
personA(Name): Dave

Tcl-ストリング

Tclのプリミティブデータ型は文字列であり、多くの場合、文字列のみの言語としてTclで引用符を見つけることができます。 これらの文字列には、英数字、数字のみ、ブール値、またはバイナリデータを含めることができます。 Tclは16ビットUnicode文字を使用し、英数字には非ラテン文字、数字または句読点を含む文字を含めることができます。

ブール値は、trueの場合は1、yesまたはtrue、falseの場合は0、no、またはfalseとして表現できます。

文字列表現

他の言語とは異なり、Tclでは、単一の単語の場合に二重引用符を含める必要はありません。 例は次のとおりです-

#!/usr/bin/tclsh

set myVariable hello
puts $myVariable

上記のコードが実行されると、次の結果が生成されます-

hello

複数の文字列を表現する場合は、二重引用符または中括弧を使用できます。 以下に示されています-

#!/usr/bin/tclsh

set myVariable "hello world"
puts $myVariable
set myVariable {hello world}
puts $myVariable

上記のコードが実行されると、次の結果が生成されます-

hello world
hello world

文字列エスケープシーケンス

文字リテラルは、プレーン文字(例: '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

以下は、いくつかのエスケープシーケンス文字を示す例です-

#!/usr/bin/tclsh

puts "Hello\tWorld\n\nfinddevguides";

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Hello   World

finddevguides

文字列コマンド

文字列コマンドのサブコマンドのリストは、次の表に記載されています-

Sr.No. Methods & Description
1
  • compare *string1 string2

string1とstring2を辞書順に比較します。 等しい場合は0、string1がstring2の前にある場合は-1、そうでない場合は1を返します。

2
  • first *string1 string2

string2でstring1が最初に出現するインデックスを返します。 見つからない場合、-1を返します。

3
  • index *string index

インデックスにある文字を返します。

4
  • last *string1 string2

string2でstring1が最後に出現したインデックスを返します。 見つからない場合、-1を返します。

5
  • length *string

文字列の長さを返します。

6
  • match pattern *string

文字列がパターンに一致する場合、1を返します。

7
  • range *string index1 index2

index1からindex2までの文字列の文字の範囲を返します。

8
  • tolower *string

小文字の文字列を返します。

9
  • toupper *string

大文字の文字列を返します。

10
  • trim *string ?trimcharacters?

文字列の両端のトリム文字を削除します。 デフォルトのトリム文字は空白です。

11
  • trimleft *string ?trimcharacters?

文字列の左端のトリム文字を削除します。 デフォルトのトリム文字は空白です。

12
  • trimright *string ?trimcharacters?

文字列の左端のトリム文字を削除します。 デフォルトのトリム文字は空白です。

13
  • wordend *findstring index

indexの文字を含む単語の後の文字のfindstringのインデックスを返します。

14
  • wordstart* findstring index

indexの文字を含む単語の最初の文字のfindstringのインデックスを返します。

一般的に使用されるTcl文字列サブコマンドの例を以下に示します。

文字列比較

#!/usr/bin/tclsh

set s1 "Hello"
set s2 "World"
set s3 "World"
puts [string compare s1 s2]
if {[string compare s2 s3] == 0} {
   puts "String \'s1\' and \'s2\' are same.";
}

if {[string compare s1 s2] == -1} {
   puts "String \'s1\' comes before \'s2\'.";
}

if {[string compare s2 s1] == 1} {
   puts "String \'s2\' comes after \'s1\'.";
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

-1
String 's1' comes before 's2'.
String 's2' comes after 's1'.

文字列のインデックス

#!/usr/bin/tclsh

set s1 "Hello World"
set s2 "o"
puts "First occurrence of $s2 in s1"
puts [string first $s2 $s1]
puts "Character at index 0 in s1"
puts [string index $s1 0]
puts "Last occurrence of $s2 in s1"
puts [string last $s2 $s1]
puts "Word end index in s1"
puts [string wordend $s1 20]
puts "Word start index in s1"
puts [string wordstart $s1 20]

上記のコードをコンパイルして実行すると、次の結果が生成されます-

First occurrence of o in s1
4
Character at index 0 in s1
H
Last occurrence of o in s1
7
Word end index in s1
11
Word start index in s1
6

ひもの長さ

#!/usr/bin/tclsh

set s1 "Hello World"
puts "Length of string s1"
puts [string length $s1]

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Length of string s1
11

取り扱いケース

#!/usr/bin/tclsh

set s1 "Hello World"
puts "Uppercase string of s1"
puts [string toupper $s1]
puts "Lowercase string of s1"
puts [string tolower $s1]

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Uppercase string of s1
HELLO WORLD
Lowercase string of s1
hello world

トリミング文字

#!/usr/bin/tclsh

set s1 "Hello World"
set s2 "World"
puts "Trim right $s2 in $s1"
puts [string trimright $s1 $s2]

set s2 "Hello"
puts "Trim left $s2 in $s1"
puts [string trimleft $s1 $s2]

set s1 " Hello World "
set s2 " "
puts "Trim characters s1 on both sides of s2"
puts [string trim $s1 $s2]

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Trim right World in Hello World
Hello
Trim left Hello in Hello World
 World
Trim characters s1 on both sides of s2
Hello World

一致する文字列

#!/usr/bin/tclsh

set s1 "[email protected]"
set s2 "*@*.com"
puts "Matching pattern s2 in s1"
puts [string match "*@*.com" $s1 ]
puts "Matching pattern tcl in s1"
puts [string match {tcl} $s1]

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Matching pattern s2 in s1
1
Matching pattern tcl in s1
0

追加コマンド

#!/usr/bin/tclsh

set s1 "Hello"
append s1 " World"
puts $s1

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Hello World

フォーマットコマンド

次の表は、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

いくつかの簡単な例を以下に示します-

#!/usr/bin/tclsh

puts [format "%f" 43.5]
puts [format "%e" 43.5]
puts [format "%d %s" 4 tuts]
puts [format "%s" "Tcl Language"]
puts [format "%x" 40]

上記のコードをコンパイルして実行すると、次の結果が生成されます-

43.500000
4.350000e+01
4 tuts
Tcl Language
28

スキャンコマンド

スキャンコマンドは、書式指定子に基づいて文字列を解析するために使用されます。 以下に例を示します。

#!/usr/bin/tclsh

puts [scan "90" {%[0-9]} m]
puts [scan "abc" {%[a-z]} m]
puts [scan "abc" {%[A-Z]} m]
puts [scan "ABC" {%[A-Z]} m]

上記のコードをコンパイルして実行すると、次の結果が生成されます-

1
1
0
1

Tcl-リスト

リストは、Tclで利用可能な基本的なデータ型の1つです。 順序付けされたアイテムのコレクションを表すために使用されます。 同じリストに異なるタイプのアイテムを含めることができます。 さらに、リストには別のリストを含めることができます。

注意する必要がある重要なことは、これらのリストが文字列として完全に表され、必要に応じて個々のアイテムを形成するために処理されることです。 そのため、大きなリストを避け、そのような場合には;配列を使用します。

リストを作成する

リストの一般的な構文は次のとおりです-

set listName { item1 item2 item3 .. itemn }
# or
set listName [list item1 item2 item3]
# or
set listName [split "items separated by a character" split_character]

いくつかの例を以下に示します-

#!/usr/bin/tclsh

set colorList1 {red green blue}
set colorList2 [list red green blue]
set colorList3 [split "red_green_blue" _]
puts $colorList1
puts $colorList2
puts $colorList3

上記のコードが実行されると、次の結果が生成されます-

red green blue
red green blue
red green blue

リストへのアイテムの追加

リストにアイテムを追加するための構文は以下のとおりです-

append listName split_character value
# or
lappend listName value

いくつかの例を以下に示します-

#!/usr/bin/tclsh

set var orange
append var " " "blue"
lappend var "red"
lappend var "green"
puts $var

上記のコードが実行されると、次の結果が生成されます-

orange blue red green

リストの長さ

リストの長さの構文は以下のとおりです-

llength listName

リストの長さの例を以下に示します-

#!/usr/bin/tclsh

set var {orange blue red green}
puts [llength $var]

上記のコードが実行されると、次の結果が生成されます-

4

インデックスのリストアイテム

特定のインデックスでリスト項目を選択するための構文は以下のとおりです-

lindex listname index

インデックスのリストアイテムの例を以下に示します-

#!/usr/bin/tclsh

set var {orange blue red green}
puts [lindex $var  1]

上記のコードが実行されると、次の結果が生成されます-

blue

インデックスにアイテムを挿入

特定のインデックスにリストアイテムを挿入するための構文を以下に示します。

linsert listname index value1 value2..valuen

特定のインデックスにリストアイテムを挿入する例を以下に示します。

#!/usr/bin/tclsh

set var {orange blue red green}
set var [linsert  $var 3 black white]
puts $var

上記のコードが実行されると、次の結果が生成されます-

orange blue red black white green

インデックスでアイテムを置き換える

特定のインデックスでリスト項目を置き換えるための構文は次のとおりです-

lreplace listname firstindex lastindex value1 value2..valuen

特定のインデックスのリストアイテムを置換する例を以下に示します。

#!/usr/bin/tclsh

set var {orange blue red green}
set var [lreplace $var 2 3 black white]
puts $var

上記のコードが実行されると、次の結果が生成されます-

orange blue black white

インデックスでアイテムを設定

特定のインデックスでリスト項目を設定するための構文は以下のとおりです-

lset listname index value

特定のインデックスでリスト項目を設定する例は以下のとおりです-

#!/usr/bin/tclsh

set var {orange blue red green}
lset var 0 black
puts $var

上記のコードが実行されると、次の結果が生成されます-

black blue red green

リストを変数に変換する

変数に値をコピーするための構文は以下のとおりです-

lassign listname variable1 variable2.. variablen

リストを変数に変換する例は以下のとおりです-

#!/usr/bin/tclsh

set var {orange blue red green}
lassign $var colour1 colour2
puts $colour1
puts $colour2

上記のコードが実行されると、次の結果が生成されます-

orange
blue

リストを並べ替える

リストをソートするための構文は以下のとおりです-

lsort listname

リストをソートするための例は以下のとおりです-

#!/usr/bin/tclsh

set var {orange blue red green}
set var [lsort $var]
puts $var

上記のコードが実行されると、次の結果が生成されます-

blue green orange red

Tcl-辞書

辞書は、値をキーにマッピングするための仕組みです。 従来の辞書の構文は以下に示されています-

dict set dictname key value
# or
dict create dictname key1 value1 key2 value2 .. keyn valuen

辞書を作成するためのいくつかの例を以下に示します-

#!/usr/bin/tclsh

dict set colours  colour1 red
puts $colours
dict set colours  colour2 green
puts $colours

set colours [dict create colour1 "black" colour2 "white"]
puts $colours

上記のコードが実行されると、次の結果が生成されます-

colour1 red
colour1 red colour2 green
colour1 black colour2 white

ダクトのサイズ

辞書のサイズを取得するための構文は以下に示されています-

[dict size dictname]

サイズを印刷する例は以下に示されています-

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
puts [dict size $colours]

上記のコードが実行されると、次の結果が生成されます-

2

辞書の反復

キーと辞書の値を印刷するための簡単な辞書の反復を以下に示します-

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
foreach item [dict keys $colours] {
   set value [dict get $colours $item]
   puts $value
}

上記のコードが実行されると、次の結果が生成されます-

black
white

Dictのキーの値

dictのキーの値を取得するための構文は次のとおりです-

[dict get $dictname $keyname]

キーの値を取得するための例は以下のとおりです-

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
set value [dict get $colours colour1]
puts $value

上記のコードが実行されると、次の結果が生成されます-

black

Dictのすべてのキー

dict内のすべてのキーを取得するための構文を以下に示します-

[dict keys $dictname]

すべてのキーを印刷する例は以下に示されています-

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
set keys [dict keys $colours]
puts $keys

上記のコードが実行されると、次の結果が生成されます-

colour1 colour2

Dictのすべての値

dict内のすべての値を取得するための構文を以下に示します-

[dict values $dictname]

すべての値を印刷する例は以下に示されています-

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
set values [dict values $colours]
puts $values

上記のコードが実行されると、次の結果が生成されます-

black white

キーは辞書に存在します

キーがdictに存在するかどうかをチェックするための構文は以下に示されています-

[dict exists $dictname $key]

キーがdictに存在するかどうかを確認するための例を以下に示します-

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
set result [dict exists $colours colour1]
puts $result

上記のコードが実行されると、次の結果が生成されます-

1

Tcl-手順

プロシージャは、特定の再利用可能な機能を提供する一連のコマンドを備えたコードブロックに他なりません。 同じコードが複数の場所で繰り返されるのを避けるために使用されます。 プロシージャは、多くのプログラミング言語で使用されている関数と同等であり、 proc コマンドを使用してTclで使用できます。

簡単な手順を作成する構文は以下に示されています-

proc procedureName {arguments} {
   body
}

手順の簡単な例を以下に示します-

#!/usr/bin/tclsh

proc helloWorld {} {
   puts "Hello, World!"
}
helloWorld

上記のコードが実行されると、次の結果が生成されます-

Hello, World!

複数の引数を持つプロシージャ

引数を持つプロシージャの例を以下に示します-

#!/usr/bin/tclsh

proc add {a b} {
   return [expr $a+$b]
}
puts [add 10 30]

上記のコードが実行されると、次の結果が生成されます-

40

可変引数を持つプロシージャ

引数を持つプロシージャの例を以下に示します-

#!/usr/bin/tclsh

proc avg {numbers} {
   set sum 0
   foreach number $numbers {
      set sum  [expr $sum + $number]
   }
   set average [expr $sum/[llength $numbers]]
   return $average
}
puts [avg {70 80 50 60}]
puts [avg {70 80 50 }]

上記のコードが実行されると、次の結果が生成されます-

65
66

デフォルトの引数を持つプロシージャ

デフォルト引数は、値が提供されない場合に使用できるデフォルト値を提供するために使用されます。 暗黙的な引数と呼ばれることもあるデフォルト引数を持つプロシージャの例を以下に示します-

#!/usr/bin/tclsh

proc add {a {b 100} } {
   return [expr $a+$b]
}
puts [add 10 30]
puts [add 10]

上記のコードが実行されると、次の結果が生成されます-

40
110

再帰的手続き

再帰的な手順の例を以下に示します-

#!/usr/bin/tclsh

proc factorial {number} {
   if {$number <= 1} {
      return 1
   }
   return [expr $number * [factorial [expr $number - 1]]]

}
puts [factorial 3]
puts [factorial 5]

上記のコードが実行されると、次の結果が生成されます-

6
120

Tcl-パッケージ

パッケージは、再利用可能なコード単位を作成するために使用されます。 パッケージは、特定の機能を提供するファイルのコレクションで構成されています。 このファイルのコレクションはパッケージ名で識別され、同じファイルの複数のバージョンを持つことができます。 パッケージは、Tclスクリプトのコレクション、バイナリライブラリ、または両方の組み合わせにすることができます。

パッケージは、名前空間の概念を使用して、変数名とプロシージャ名の衝突を回避します。 次の「link:/tcl-tk/tcl_namespaces [namespace]」チュートリアルで詳細を確認してください。

パッケージ作成

パッケージは、最低2つのファイルを使用して作成できます。 1つのファイルにはパッケージコードが含まれています。 他のファイルには、パッケージを宣言するためのインデックスパッケージファイルが含まれています。

パッケージを作成および使用するための手順のリストを以下に示します。

ステップ1:コードの作成

HelloWorldなどのフォルダー内にパッケージのコードを作成します。 以下に示すコードを使用して、ファイルにHelloWorld.tclという名前を付けます-

#/Users/rajkumar/Desktop/helloworld/HelloWorld.tcl
# Create the namespace
namespace eval ::HelloWorld {

  # Export MyProcedure
  namespace export MyProcedure

  # My Variables
   set version 1.0
   set MyDescription "HelloWorld"

  # Variable for the path of the script
   variable home [file join [pwd] [file dirname [info script]]]

}

# Definition of the procedure MyProcedure
proc ::HelloWorld::MyProcedure {} {
   puts $HelloWorld::MyDescription
}

package provide HelloWorld $HelloWorld::version
package require Tcl 8.0

ステップ2:パッケージインデックスの作成

tclshを開きます。 HelloWorldディレクトリに切り替え、pkg_mkIndexコマンドを使用して、以下に示すようにインデックスファイルを作成します-

% cd/Users/rajkumar/Desktop/helloworld
% pkg_mkIndex . *.tcl

ステップ3:自動パスへのディレクトリの追加

以下に示すように、グローバルリストにパッケージを追加するには、lappendコマンドを使用します-

% lappend auto_path "/Users/rajkumar/Desktop/helloworld"

ステップ4:パッケージの追加

次に、以下に示すようにpackage requireステートメントを使用してプログラムにパッケージを追加します-

% package require HelloWorld 1.0

ステップ5:手順の呼び出し

今、すべてがセットアップされているので、以下に示すようにプロシージャを呼び出すことができます-

% puts [HelloWorld::MyProcedure]

次の結果が得られます-

HelloWorld

最初の2つのステップでパッケージを作成します。 パッケージが作成されたら、以下に示すように最後の3つのステートメントを追加することにより、Tclファイルで使用できます-

lappend auto_path "/Users/rajkumar/Desktop/helloworld"
package require HelloWorld 1.0
puts [HelloWorld::MyProcedure]

次の結果が得られます-

HelloWorld

Tcl-名前空間

名前空間は、変数とプロシージャをグループ化するために使用される識別子のセットのコンテナです。 名前空間はTclバージョン8.0から利用できます。 名前空間の導入前には、単一のグローバルスコープがありました。 名前空間を使用して、グローバルスコープのパーティションを追加しました。

名前空間の作成

名前空間は、 namespace コマンドを使用して作成されます。 名前空間を作成するための簡単な例を以下に示します-

#!/usr/bin/tclsh

namespace eval MyMath {
  # Create a variable inside the namespace
  variable myResult
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {
  set ::MyMath::myResult [expr $a + $b]
}
MyMath::Add 10 23

puts $::MyMath::myResult

上記のコードが実行されると、次の結果が生成されます-

33

上記のプログラムでは、変数 myResult とプロシージャ* Add。*を含む名前空間があります。これにより、異なる名前空間で同じ名前の変数とプロシージャを作成できます。

入れ子になった名前空間

Tclでは、名前空間をネストできます。 ネスト名前空間の簡単な例を以下に示します-

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
}

namespace eval extendedMath {
   # Create a variable inside the namespace
   namespace eval MyMath {
      # Create a variable inside the namespace
      variable myResult
   }
}
set ::MyMath::myResult "test1"
puts $::MyMath::myResult
set ::extendedMath::MyMath::myResult "test2"
puts $::extendedMath::MyMath::myResult

上記のコードが実行されると、次の結果が生成されます-

test1
test2

名前空間のインポートとエクスポート

前の名前空間の例をご覧ください。多くのスコープ解決演算子を使用していますが、使用するのはより複雑です。 これを回避するには、名前空間をインポートおよびエクスポートします。 以下に例を示します-

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
   namespace export Add
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {
   return [expr $a + $b]
}

namespace import MyMath::*
puts [Add 10 30]

上記のコードが実行されると、次の結果が生成されます-

40

名前空間を忘れる

*forget* サブコマンドを使用して、インポートされたネームスペースを削除できます。 簡単な例を以下に示します-
#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
   namespace export Add
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {
   return [expr $a + $b]
}
namespace import MyMath::*
puts [Add 10 30]
namespace forget MyMath::*

上記のコードが実行されると、次の結果が生成されます-

40

Tcl-ファイルI/O

Tclは、組み込みコマンドopen、read、puts、gets、closeの助けを借りてファイル処理をサポートします。

ファイルは一連のバイトを表し、テキストファイルまたはバイナリファイルのどちらでもかまいません。

ファイルを開く

Tclは、openコマンドを使用してTclでファイルを開きます。 ファイルを開くための構文は次のとおりです-

open fileName accessMode

ここで、ファイル名*は文字列リテラルであり、これを使用してファイルに名前を付け、 *accessMode は次のいずれかの値を持つことができます-

Sr.No. Mode & Description
1

r

読み取り用に既存のテキストファイルを開きます。ファイルは存在している必要があります。 これは、accessModeが指定されていない場合に使用されるデフォルトモードです。

2

w

書き込み用にテキストファイルを開きます。テキストファイルが存在しない場合は、新しいファイルが作成され、存在しない場合は既存のファイルが切り捨てられます。

3

a

追加モードで書き込むためにテキストファイルを開き、ファイルが存在する必要があります。 ここで、プログラムは既存のファイルコンテンツにコンテンツの追加を開始します。

4

rPLUS

読み取りと書き込みの両方のためにテキストファイルを開きます。 ファイルはすでに存在している必要があります。

5

wPLUS

読み取りと書き込みの両方のためにテキストファイルを開きます。 最初にファイルが存在する場合はファイルをゼロ長に切り捨て、存在しない場合はファイルを作成します。

6

aPLUS

読み取りと書き込みの両方のためにテキストファイルを開きます。 ファイルが存在しない場合は作成します。 読み取りは最初から始まりますが、書き込みは追加のみ可能です。

ファイルを閉じる

ファイルを閉じるには、closeコマンドを使用します。 閉じるための構文は次のとおりです-

close fileName

プログラムによって開かれたファイルは、プログラムがそのファイルの使用を終了したときに閉じる必要があります。 ほとんどの場合、ファイルを明示的に閉じる必要はありません。 Fileオブジェクトが自動的に終了すると、それらは自動的に閉じられます。

ファイルを書く

Putsコマンドは、開いているファイルに書き込むために使用されます。

puts $filename "text to write"

ファイルへの書き込みの簡単な例を以下に示します。

#!/usr/bin/tclsh

set fp [open "input.txt" w+]
puts $fp "test"
close $fp

上記のコードがコンパイルされて実行されると、それが開始されたディレクトリ(プログラムの作業ディレクトリ)に新しいファイル input.txt を作成します。

ファイルを読む

以下は、ファイルから読み取るための簡単なコマンドです-

set file_data [read $fp]

読み取りおよび書き込みの完全な例を以下に示します-

#!/usr/bin/tclsh

set fp [open "input.txt" w+]
puts $fp "test"
close $fp
set fp [open "input.txt" r]
set file_data [read $fp]
puts $file_data
close $fp

上記のコードがコンパイルおよび実行されると、前のセクションで作成されたファイルを読み取り、次の結果を生成します-

test

これは、ファイルの終わりまでファイルを1行ずつ読み込む別の例です-

#!/usr/bin/tclsh

set fp [open "input.txt" w+]
puts $fp "test\ntest"
close $fp
set fp [open "input.txt" r]

while { [gets $fp data] >= 0 } {
   puts $data
}
close $fp

上記のコードがコンパイルおよび実行されると、前のセクションで作成されたファイルを読み取り、次の結果を生成します-

test
test

Tcl-エラー処理

Tclのエラー処理は、 error および catch コマンドの助けを借りて提供されます。 これらの各コマンドの構文は次のとおりです。

エラー構文

error message info code

上記のエラーコマンド構文では、messageはエラーメッセージであり、infoはグローバル変数errorInfoに設定され、codeはグローバル変数errorCodeに設定されます。

キャッチ構文

catch script resultVarName

上記のcatchコマンド構文では、scriptは実行するコードであり、resultVarNameはエラーまたは結果を保持する変数です。 catchコマンドは、エラーがない場合は0を返し、エラーがある場合は1を返します。

簡単なエラー処理の例を以下に示します-

#!/usr/bin/tclsh

proc Div {a b} {
   if {$b == 0} {
      error "Error generated by error" "Info String for error" 401
   } else {
      return [expr $a/$b]
   }
}

if {[catch {puts "Result = [Div 10 0]"} errmsg]} {
   puts "ErrorMsg: $errmsg"
   puts "ErrorCode: $errorCode"
   puts "ErrorInfo:\n$errorInfo\n"
}

if {[catch {puts "Result = [Div 10 2]"} errmsg]} {
   puts "ErrorMsg: $errmsg"
   puts "ErrorCode: $errorCode"
   puts "ErrorInfo:\n$errorInfo\n"
}

上記のコードが実行されると、次の結果が生成されます-

ErrorMsg: Error generated by error
ErrorCode: 401
ErrorInfo:
Info String for error
   (procedure "Div" line 1)
   invoked from within
"Div 10 0"

Result = 5

上記の例でわかるように、独自のカスタムエラーメッセージを作成できます。 同様に、Tclによって生成されたエラーをキャッチすることもできます。 以下に例を示します-

#!/usr/bin/tclsh

catch {set file [open myNonexistingfile.txt]} result
puts "ErrorMsg: $result"
puts "ErrorCode: $errorCode"
puts "ErrorInfo:\n$errorInfo\n"

上記のコードが実行されると、次の結果が生成されます-

ErrorMsg: couldn't open "myNonexistingfile.txt": no such file or directory
ErrorCode: POSIX ENOENT {no such file or directory}
ErrorInfo:
couldn't open "myNonexistingfile.txt": no such file or directory
   while executing
"open myNonexistingfile.txt"

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
  • abs *arg

argの絶対値を計算します。

2
  • acos *arg

argのアークコサインを計算します。

3
  • asin *arg

argの逆正弦を計算します。

4
  • atan *arg

argのアークタンジェントを計算します。

5
  • atan2 *y x

引数の商の逆正接を計算します(y/x)。

6
  • ceil *arg

数値以上の最小の整数を計算します。

7
  • cos *arg

argのコサインを計算します。

8
  • cosh *arg

argの双曲線余弦を計算します。

9
  • double *arg

argが浮動小数点値であるかどうかを計算し、argを返します。それ以外の場合、argを浮動小数点に変換し、変換された値を返します。

10
  • exp *arg

指数関数を計算します(eの累乗)。

11
  • floor *arg

arg以下の最大整数を計算します。

12
  • fmod *x y

xをyで除算した浮動小数点の剰余を計算します。 yが0の場合、エラーが返されます。

13
  • hypot *x y

直角三角形sqrt(x* x + y *y)の斜辺の長さを計算します。

14
  • int *arg

argがマシンワードと同じ幅の整数値かどうかを計算し、argを返します。それ以外の場合は、argを整数に変換します。

15
  • log *arg

argの自然対数を計算します。

16
  • log10 *arg

argの10を底とする対数を計算します。

17
  • pow *x y

xをy乗した値を計算します。 xが負の場合、yは整数値でなければなりません。

18
  • rand*

0から1の間の擬似乱数を計算します。

19
  • round *arg

最も近い整数に丸められたargの値を計算します。

20
  • sin *arg

argのサインを計算します。

21
  • sinh *arg

argの双曲線正弦を計算します。

22
  • sqrt *arg

argの平方根を計算します。 argは正でなければなりません。

23
  • srand *arg

0から1の間の擬似乱数を計算します。 argは整数でなければならず、randの乱数ジェネレーターのシードをリセットするために使用されます。

24
  • tan *arg

argのタンジェントを計算します。

25
  • tanh *arg

argの双曲線正接を計算します。

26
  • wide* arg

argが既に1でない場合、少なくとも64ビット幅の整数値を計算します(argが32ビット数の場合は符号拡張により)。

数学関数を使用したいくつかの例を以下に示します-

#!/usr/bin/tclsh

namespace import ::tcl::mathfunc::*
puts [tan 10]
puts [pow 10 2]
puts [ceil 10.34]
puts [hypot 10 20]
puts [srand 45]
puts [log 10]
puts [srand 45]

上記のコードが実行されると、次の結果が生成されます-

0.6483608274590866
100.0
11.0
22.360679774997898
0.0003521866166741525
2.302585092994046
0.0003521866166741525

システム機能

Tclの重要なシステム機能には、

  • clock -現在の時刻を秒単位で返す秒関数。
  • clock -秒を日付と時刻にフォーマットするフォーマット関数。
  • clock -入力文字列をスキャンし、それを秒に変換するスキャン機能。
  • open -ファイルを開くために使用される関数。
  • exec -システムコマンドを実行するために使用される機能。
  • close -ファイルを閉じるために使用される関数。

上記の機能のいくつかの例を以下に示します-

#!/usr/bin/tclsh

#get seconds
set currentTime [clock seconds]
puts $currentTime
#get format
puts "The time is: [clock format $currentTime -format %H:%M:%S]"
puts "The date is: [clock format $currentTime -format %D]"

set date "Jun 15, 2014"
puts [clock scan $date -format {%b %d, %Y}]

puts [exec ls]
puts [exec dir]

set a  [open input.txt]
puts [read $a];
puts $a
close $a

上記のコードが実行されると、次の結果が生成されます-

1402819756
The time is: 03:09:16
The date is: 06/15/2014
1402808400
input.txt
main.tcl
input.txt  main.tcl
This is the file you can use to provide input to your program and later on open
   it inside your program to process the input.

file3

次の表に、日付と時刻のフォーマットに使用できるリスト文字列を示します。

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までの範囲に一致します。

構文

正規表現の構文は次のとおりです-

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn

ここで、正規表現はコマンドです。 オプションのスイッチについては後ほど説明します。 パターンは、前述のルールです。 検索文字列は、正規表現が実行される実際の文字列です。 完全一致は、一致した正規表現の結果を保持する任意の変数です。 Submatch1からSubMatchnは、サブ一致パターンの結果を保持するオプションのsubMatch変数です。

複雑な例に進む前に、いくつかの簡単な例を見てみましょう。 アルファベットを含む文字列の簡単な例。 他の文字が正規表現に遭遇すると、検索は停止され、返されます。

#!/usr/bin/tclsh

regexp {([A-Za-z]*)} "Tcl Tutorial" a b
puts "Full Match: $a"
puts "Sub Match1: $b"

上記のコードが実行されると、次の結果が生成されます-

Full Match: Tcl
Sub Match1: Tcl

複数のパターン

次の例は、複数のパターンを検索する方法を示しています。 これは、アルファベットの後に任意の文字が続き、その後にアルファベットが続くパターン例です。

#!/usr/bin/tclsh

regexp {([A-Za-z]*).([A-Za-z]*)} "Tcl Tutorial" a b c
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

上記のコードが実行されると、次の結果が生成されます-

Full Match: Tcl Tutorial
Sub Match1: Tcl
Sub Match2: Tutorial

サブパターンが複数のパターンを含むことができることを示すために上記のコードの修正版は以下に示されています-

#!/usr/bin/tclsh

regexp {([A-Za-z]*.([A-Za-z]*))} "Tcl Tutorial" a b c
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

上記のコードが実行されると、次の結果が生成されます-

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Regexコマンドのスイッチ

Tclで利用可能なスイッチのリストは、

  • nocase -大文字小文字を無視するために使用されます。
  • indices -一致した文字の代わりに一致したサブパターンの場所を保存します。
  • line -新しい行依存のマッチング。 改行の後の文字を無視します。
  • 開始インデックス-検索パターンの開始のオフセットを設定します。
  • スイッチの終わりを示します

上記の例では、すべてのアルファベットに対して[A-Z、a-z]を意図的に使用しましたが、以下に示すように-nocaseを簡単に使用できます-

#!/usr/bin/tclsh

regexp -nocase {([A-Z]*.([A-Z]*))} "Tcl Tutorial" a b c
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

上記のコードが実行されると、次の結果が生成されます-

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

スイッチを使用した別の例を以下に示します-

#!/usr/bin/tclsh

regexp -nocase -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b
puts "Full Match: $a"
puts "Sub Match1: $b"
regexp -nocase -start 4 -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b
puts "Full Match: $a"
puts "Sub Match1: $b"

上記のコードが実行されると、次の結果が生成されます-

Full Match: Tcl
Sub Match1: Tcl
Full Match: Tutorial
Sub Match1: Tutorial

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ファイルを作成しましょう。 これを最初のプログラムとして使用し、選択したプラットフォームで実行します。

#!/usr/bin/wish

grid [ttk::button .mybutton -text "Hello World"]

次のセクションでは、利用可能な各プラットフォームにTcl/Tkをインストールする方法のみを説明します。

Windowsへのインストール

使用可能なアクティブなTcl/Tkバイナリのリストから、Windows installerの最新バージョンをダウンロードします。 アクティブなTcl/Tkコミュニティエディションは個人での使用は無料です。

ダウンロードした実行可能ファイルを実行して、TclとTkをインストールします。これは、画面の指示に従って実行できます。

今、私たちはcdを使用してファイルを含むフォルダに切り替えて、次のステップを使用してhelloWorld.tclなどのTclファイルを構築して実行することができます-

C:\Tcl> wish helloWorld.tcl

Enterキーを押すと、次のような出力が表示されます-

Hello World Windows

Linuxへのインストール

ほとんどのLinuxオペレーティングシステムにはTkが組み込まれているため、これらのシステムですぐに使用を開始できます。 使用できない場合は、次のコマンドを使用してTcl-Tkをダウンロードおよびインストールできます。

$ yum install tcl tk

今、私たちは、* cdコマンド*を使用してファイルを含むフォルダに切り替えてから次のステップを使用してhelloWorld.tclなどのTclファイルを構築して実行することができます-

$ wish helloWorld.tcl

Enterを押すと、次のような出力が表示されます-

Hello World

Debianベースのシステムへのインストール

あなたのOSで事前に構築されていない場合には、次のコマンドを使用してTcl-Tkをダウンロードしてインストールすることができます-

$ sudo apt-get install tcl tk

今、私たちは* cdコマンド*を使用してファイルを含むフォルダに切り替えてから次の手順を使用して、helloWorld.tclなどのTclファイルを構築して実行することができます-

$ wish helloWorld.tcl

Enterを押すと、次のような出力が表示されます-

Hello World

Mac OS Xでのインストール

利用可能なアクティブなTcl/Tkバイナリのリストから、Mac OS Xの最新バージョンhttps://www.activestate.com/activetcl/downloads[package]をダウンロードします。 Active Tclコミュニティエディションは、個人での使用は無料です。

ダウンロードした実行可能ファイルを実行して、アクティブなTclをインストールします。これは、画面の指示に従って実行できます。

今、私たちは、* cdコマンド*を使用してファイルを含むフォルダに切り替えてから次のステップを使用してhelloWorld.tclなどのTclファイルを構築して実行することができます-

$ wish helloWorld.tcl

Enterキーを押すと、次のような出力が表示されます-

Hello World

ソースファイルからのインストール

バイナリパッケージが利用できない場合、ソースファイルからインストールするオプションを使用できます。 一般に、WindowsおよびMac OS XにはTkバイナリを使用することをお勧めします。そのため、UNIXベースのシステムでのソースのコンパイルのみを以下に示します-

  • https://www.tcl.tk/software/tcltk/downloadl [ソースファイル]をダウンロードします。
  • 次に、ダウンロードしたフォルダーに切り替えた後、次のコマンドを使用して抽出、コンパイル、ビルドを行います。
$ tar zxf tk8.6.1-src.tar.gz
$ cd tcl8.6.1
$ cd unix
$ ./configure —with-tcl=../../tcl8.6.1/unix —prefix=/opt —enable-gcc
$ make
$ sudo make install

-必ず、上記のコマンド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バージョン

#!/usr/bin/wish

puts $tk_version

プログラムを実行すると、次のような出力が得られます。

8.5

TKライブラリパス

#!/usr/bin/wish

puts $tk_library

プログラムを実行すると、次のような出力が得られます。

/Library/Frameworks/Tk.framework/Versions/8.6/Resources/Scripts

TKパッチレベル

#!/usr/bin/wish

puts $tk_patchLevel

プログラムを実行すると、次のような出力が得られます。

8.6.1

TK STRICTMOTIF

#!/usr/bin/wish

puts $tk_strictMotif

プログラムを実行すると、次のような出力が得られます。

0

Tk-ウィジェットの概要

Tkベースのアプリケーションの基本コンポーネントは、ウィジェットと呼ばれます。 Tkでは、「ウィンドウ」と「ウィジェット」はしばしば同じ意味で使用されるため、コンポーネントはウィンドウとも呼ばれます。 Tkは、Tclでグラフィカルアプリケーションを作成するための豊富なグラフィカルコンポーネントセットを提供するパッケージです。

Tkは、ボタンやメニューなどの基本的なGUIウィジェットからデータ表示ウィジェットまで、さまざまなウィジェットを提供します。 ウィジェットは、デフォルトの構成になっているため、使いやすくなっています。

Tkアプリケーションは、任意の数のウィジェットが別のウィジェット内に配置され、それらのウィジェットが別のウィジェット内に配置されるウィジェット階層に従います。 Tkプログラムのメインウィジェットはルートウィジェットと呼ばれ、TkRootクラスの新しいインスタンスを作成することで作成できます。

ウィジェットを作成する

ウィジェットを作成するための構文は次のとおりです。

type variableName arguments options

ここでのタイプは、ボタン、ラベルなどのウィジェットタイプを指します。 引数はオプションであり、各ウィジェットの個々の構文に基づいて必要になります。 オプションの範囲は、各コンポーネントのサイズから書式設定までです。

ウィジェットの命名規則

ウィジェットは、パッケージの命名に似た構造を使用します。 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

ウィジェットの幅を設定します。

オプションの簡単な例を以下に示します。

#!/usr/bin/wish

grid [label .myLabel -background red -text "Hello World" -relief ridge -borderwidth 3]
   -padx 100 -pady 100

上記のプログラムを実行すると、次の出力が得られます。

Hello Worldオプション

利用可能なウィジェットのリストは以下に分類されます-

基本的なウィジェット

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

Label

1行のテキストを表示するためのウィジェット。

2

Button

クリック可能なウィジェットで、アクションをトリガーします。

3

Entry

入力として1行のテキストを受け入れるために使用されるウィジェット。

4

Message

複数行のテキストを表示するためのウィジェット。

5

Text

複数行のテキストを表示し、オプションで編集するためのウィジェット。

6

Toplevel

新しいトップレベルウィンドウであるフレームを作成するために使用されるウィジェット。

基本的なウィジェットを使用して、単純なTkの例を以下に示します-

#!/usr/bin/wish

grid [label .myLabel -text "Label Widget" -textvariable labelText]
grid [text .myText -width 20 -height 5]
.myText insert 1.0 "Text\nWidget\n"
grid [entry .myEntry -text "Entry Widget"]
grid [message .myMessage -background red -foreground white -text "Message\nWidget"]
grid [button .myButton1  -text "Button" -command "set labelText clicked"]

上記のプログラムを実行すると、次の出力が得られます-

基本的なウィジェットの例

Tk-レイアウトウィジェット

レイアウトウィジェットは、Tkアプリケーションのレイアウトを処理するために使用されます。 フレームウィジェットは他のウィジェットのグループに使用され、配置、パック、グリッドはレイアウトマネージャーであり、ウィンドウへの追加を完全に制御できます。 利用可能なレイアウトウィジェットのリストは以下のとおりです-

Sr.No. Widgets & Description
1

Frame

他のウィジェットを保持するコンテナウィジェット。

2

Place

原点の座標と正確なサイズで特定の場所に他のウィジェットを保持するウィジェット。

3

Pack

ウィジェットを親ウィジェットに配置する前にブロックで整理するシンプルなウィジェット。

4

Grid

異なる方向にパッキングするウィジェットをネストするウィジェット。

シンプルなTkの例を、レイアウトウィジェットについて以下に示します-

#!/usr/bin/wish

frame .myFrame1 -background red  -relief ridge -borderwidth 8 -padx 10 -pady 10
   -height 100 -width 100
frame .myFrame2 -background blue  -relief ridge -borderwidth 8 -padx 10 -pady 10
   -height 100 -width 50
pack .myFrame1
pack .myFrame2

上記のプログラムを実行すると、次の出力が得られます-

フレームウィジェットの例

Tk-選択ウィジェット

選択ウィジェットは、Tkアプリケーションのさまざまなオプションを選択するために使用されます。 利用可能な選択ウィジェットのリストは次のとおりです。

Sr.No. Widgets & Description
1

Radiobutton

オン/オフボタンとラベルのセットがあり、そのうちの1つを選択できるウィジェット。

2

Checkbutton

オン/オフボタンとラベルのセットがあり、その多くを選択できるウィジェット。

3

Menu

メニュー項目のホルダーとして機能するウィジェット。

4

Listbox

1つ以上のセルを選択できるセルのリストを表示するウィジェット。

選択ウィジェットを使用して、単純なTkの例を以下に示します-

#!/usr/bin/wish

grid [frame .gender ]
grid [label .label1  -text "Male" -textvariable myLabel1 ]
grid [radiobutton .gender.maleBtn -text "Male"   -variable gender -value "Male"
   -command "set  myLabel1 Male"] -row 1 -column 2
grid [radiobutton .gender.femaleBtn -text "Female" -variable gender -value "Female"
   -command "set  myLabel1 Female"] -row 1 -column 3
.gender.maleBtn select
grid [label .myLabel2  -text "Range 1 not selected" -textvariable myLabelValue2 ]
grid [checkbutton .chk1 -text "Range 1" -variable occupied1 -command {if {$occupied1 } {
   set myLabelValue2 {Range 1 selected}
} else {
   set myLabelValue2 {Range 1 not selected}
} }]
proc setLabel {text} {
   .label configure -text $text
}

上記のプログラムを実行すると、次の出力が得られます-

選択ウィジェットの例

Tk-キャンバスウィジェット

Canvasは、描画領域を提供するために使用されます。 キャンバスウィジェットの構文を以下に示します-

canvas canvasName options

オプション

キャンバスウィジェットで使用可能なオプションは、次の表のとおりです-

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

スクロールが要求されたときに垂直にスクロールする量。

キャンバスウィジェットの簡単な例を以下に示します-

#!/usr/bin/wish

canvas .myCanvas -background red -width 100 -height 100
pack .myCanvas

上記のプログラムを実行すると、次の出力が得られます-

Canvas Widget Example

Canvasで描画するためのウィジェット

キャンバスでの描画に使用可能なウィジェットのリストは以下のとおりです-

Sr.No. Widget & Description
1

Line

線を引きます。

2

Arc

弧を描きます。

3

Rectangle

長方形を描画します。

4

Oval

楕円を描画します。

5

Polygon

多角形を描画します。

6

Text

テキストを描画します。

7

Bitmap

ビットマップを描画します。

8

Image

画像を描画します。

異なるキャンバスウィジェットを使用した例を以下に示します-

#!/usr/bin/wish

canvas .myCanvas -background red -width 200 -height 200
pack .myCanvas
.myCanvas create arc 10 10 50 50 -fill yellow
.myCanvas create line 10 30 50 50 100 10 -arrow both -fill yellow -smooth true
   -splinesteps 2
.myCanvas create oval 50 50 100 80 -fill yellow
.myCanvas create polygon 50 150 100 80 120 120 100 190 -fill yellow -outline green
.myCanvas create rectangle 150 150 170 170  -fill yellow
.myCanvas create text 170 20 -fill yellow -text "Hello" -font {Helvetica -18 bold}
.myCanvas create bitmap 180 50 -bitmap info

上記のプログラムを実行すると、次の出力が得られます-

Canvas Widget Example2

Tk-メガウィジェット

メガウィジェットには、大規模なTkアプリケーションでしばしば必要とされる多くの複雑なウィジェットが含まれています。 利用可能なメガウィジェットのリストは以下のとおりです-

Sr.No. Widget & Description
1

Dialog

ダイアログボックスを表示するためのウィジェット。

2

Spinbox

ユーザーが数字を選択できるウィジェット。

3

Combobox

エントリと、使用可能な選択肢のリストを組み合わせたウィジェット。

4

Notebook

インデックスタブを使用して、複数のページの1つを切り替えるのに役立つタブ付きウィジェット。

5

Progressbar

ファイルのアップロードなどの長い操作の進行状況を視覚的にフィードバックするウィジェット。

6

Treeview

ツリーの形式でアイテムの階層を表示し、閲覧できるウィジェット。

7

Scrollbar

テキストまたはキャンバスウィジェットなしのスクロールウィジェット。

8

Scale

スライダーを使用して数値を選択するウィジェットを拡大縮小します。

いくつかのメガウィジェットを使用した簡単なTkの例を以下に示します。

#!/usr/bin/wish

ttk::treeview .tree -columns "Creator Year" -displaycolumns "Year Creator"
.tree heading Creator -text "Creator" -anchor center
.tree heading Year -text "Year" -anchor center
pack .tree
.tree insert {} end -id Languages -text "Languages"
.tree insert Languages end -text C -values [list "Dennis Ritchie" "1990"]
proc scaleMe {mywidget scaleValue} {
   $mywidget configure -length $scaleValue
}
pack [scale .s2  -from 100.0 -to 200.0 -length 100 -background yellow -borderwidth 5
   -font{Helvetica -18 bold} -foreground red -width 40 -relief ridge -orien horizontal
   -variable a -command "scaleMe .s2" ]
pack [ttk::progressbar .p1 -orient horizontal -length 200 -mode indeterminate -value 90]
pack [ttk::progressbar .p2 -orient horizontal -length 200 -mode determinate -variable a
   -maximum 75 -value 20]

上記のプログラムを実行すると、次の出力が得られます-

メガウィジェットの例

Tk-フォント

テキストの表示をサポートする多くのウィジェットがあります。 これらのほとんどは、フォント属性のオプションを提供します。 フォントを作成するための構文は以下に示されています-

font create fontName options

オプション

フォント作成に使用できるオプションは、次の表に以下にリストされています-

Sr.No. Syntax & Description
1

-family familyName

フォントファミリーの名前。

2

-size number

フォントのサイズ。

3

-weight level

フォントの太さ。

フォント作成の簡単な例を以下に示します-

#!/usr/bin/wish

font create myFont -family Helvetica -size 18 -weight bold
pack [label .myLabel -font myFont -text "Hello World"]

上記のプログラムを実行すると、次の出力が得られます-

フォントの例

利用可能なすべてのフォントを取得するには、次のコマンドを使用できます-

#!/usr/bin/wish

puts [font families]

上記のコマンドを実行すると、次の出力が得られます-

{Abadi MT Condensed Extra Bold} {Abadi MT Condensed Light} {Al Bayan} {Al Nile}
{Al Tarikh} {American Typewriter} {Andale Mono} Arial {Arial Black}
{Arial Hebrew} {Arial Narrow} {Arial Rounded MT Bold} {Arial Unicode MS}
Athelas Avenir {Avenir Next} {Avenir Next Condensed} Ayuthaya Baghdad {Bangla MN}
{Bangla Sangam MN} {Baoli SC} Baskerville {Baskerville Old Face} Batang {Bauhaus 93}
Beirut {Bell MT} {Bernard MT Condensed} BiauKai {Big Caslon} {Book Antiqua}
{Bookman Old Style} {Bookshelf Symbol 7} Braggadocio {Britannic Bold} {Brush Script MT}
Calibri {Calisto MT} Cambria {Cambria Math} Candara Century {Century Gothic}
{Century Schoolbook} Chalkboard {Chalkboard SE} Chalkduster {Charcoal CY} Charter
Cochin {Colonna MT} {Comic Sans MS} Consolas Constantia {Cooper Black} Copperplate
{Copperplate Gothic Bold} {Copperplate Gothic Light} Corbel {Corsiva Hebrew} Courier
{Courier New} {Curlz MT} Damascus {DecoType Naskh} Desdemona {Devanagari MT}
{Devanagari Sangam MN} Didot {DIN Alternate} {DIN Condensed} {Diwan Kufi} {Diwan Thuluth}
{Edwardian Script ITC} {Engravers MT} {Euphemia UCAS} Eurostile Farah Farisi
{Footlight MT Light} {Franklin Gothic Book} {Franklin Gothic Medium}
Futura Gabriola Garamond {GB18030 Bitmap} {Geeza Pro} Geneva {Geneva CY}
Georgia {Gill Sans} {Gill Sans MT} {Gloucester MT Extra Condensed}
{Goudy Old Style} {Gujarati MT} {Gujarati Sangam MN} Gulim GungSeo {Gurmukhi MN}
{Gurmukhi MT} {Gurmukhi Sangam MN} Haettenschweiler {Hannotate SC} {Hannotate TC}
{HanziPen SC} {HanziPen TC} Harrington HeadLineA Hei {Heiti SC} {Heiti TC}
Helvetica {Helvetica CY} {Helvetica Neue} Herculanum {Hiragino Kaku Gothic Pro}
{Hiragino Kaku Gothic ProN} {Hiragino Kaku Gothic Std} {Hiragino Kaku Gothic StdN}
{Hiragino Maru Gothic Pro} {Hiragino Maru Gothic ProN}
{Hiragino Mincho Pro} {Hiragino Mincho ProN} {Hiragino Sans GB}
{Hoefler Text} Impact {Imprint MT Shadow} InaiMathi {Iowan Old Style} Kai Kailasa
{Kaiti SC} {Kaiti TC} {Kannada MN} {Kannada Sangam MN} Kefa {Khmer MN} {Khmer Sangam MN}
{Kino MT} Kokonor Krungthep KufiStandardGK {Lantinghei SC} {Lantinghei TC} {Lao MN}
{Lao Sangam MN} {Libian SC} {LiHei Pro} {LiSong Pro} {Lucida Blackletter} {Lucida Bright}
{Lucida Calligraphy} {Lucida Console} {Lucida Fax} {Lucida Grande} {Lucida Handwriting}
{Lucida Sans} {Lucida Sans Typewriter} {Lucida Sans Unicode} {Malayalam MN}
{Malayalam Sangam MN} Marion {Marker Felt} Marlett {Matura MT Script Capitals}
Meiryo Menlo {Microsoft Sans Serif} Mishafi Mistral {Modern No. 20} Monaco {MS Gothic}
{MS Mincho} {MS PGothic} {MS PMincho} {MS Reference Sans Serif} {MS Reference Specialty}
Mshtakan {MT Extra} Muna {Myanmar MN} {Myanmar Sangam MN} Nadeem {Nanum Brush Script}
{Nanum Gothic} {Nanum Myeongjo} {Nanum Pen Script} {New Peninim MT} {News Gothic MT}
Noteworthy Onyx Optima {Oriya MN} {Oriya Sangam MN} Osaka Palatino {Palatino Linotype}
Papyrus PCMyungjo Perpetua {Perpetua Titling MT} PilGi {Plantagenet Cherokee}
Playbill PMingLiU {PT Mono} {PT Sans} {PT Sans Caption} {PT Sans Narrow} {PT Serif}
{PT Serif Caption} Raanana Rockwell {Rockwell Extra Bold} Sana Sathu {Savoye LET}
Seravek Silom SimSun {Sinhala MN} {Sinhala Sangam MN} Skia {Snell Roundhand} {Songti SC}
{Songti TC} Stencil STFangsong STHeiti STIXGeneral STIXIntegralsD STIXIntegralsSm
STIXIntegralsUp STIXIntegralsUpD STIXIntegralsUpSm STIXNonUnicode STIXSizeFiveSym
STIXSizeFourSym STIXSizeOneSym STIXSizeThreeSym STIXSizeTwoSym STIXVariants STKaiti
STSong Superclarendon Symbol Tahoma {Tamil MN} {Tamil Sangam MN} TeamViewer8 {Telugu MN}
{Telugu Sangam MN} Thonburi Times {Times New Roman} {Trebuchet MS} {Tw Cen MT} Verdana
Waseem {Wawati SC} {Wawati TC} Webdings {Weibei SC} {Weibei TC} {Wide Latin} Wingdings
{Wingdings 2} {Wingdings 3} {Xingkai SC} {Yuanti SC} YuGothic YuMincho {Yuppy SC}
{Yuppy TC} {Zapf Dingbats} Zapfino {Apple Braille} {Apple Chancery} {Apple Color Emoji}
{Apple LiGothic} {Apple LiSung} {Apple SD Gothic Neo} {Apple Symbols}
AppleGothic AppleMyungjo {Monotype Corsiva} {Monotype Sorts}

Tk-画像

画像ウィジェットは、画像の作成と操作に使用されます。 イメージを作成するための構文は次のとおりです-

image create type name options

上記の構文では、タイプは写真またはビットマップで、名前は画像識別子です。

オプション

イメージの作成に使用できるオプションは、次の表のとおりです-

Sr.No. Syntax & Description
1

-file fileName

画像ファイル名の名前。

2

-height number

ウィジェットの高さを設定するために使用されます。

3

-width number

ウィジェットの幅を設定します。

4

-data string

Base 64エンコード文字列の画像。

画像ウィジェットの簡単な例を以下に示します-

#!/usr/bin/wish

image create photo imgobj -file "/Users/rajkumar/Desktop/F Drive/pictur/vb/Forests/
   680049.png" -width 400 -height 400
pack [label .myLabel]
.myLabel configure -image imgobj

上記のプログラムを実行すると、次の出力が得られます-

画像の例

画像の利用可能な機能は、次の表に以下に記載されています-

Sr.No. Syntax & Description
1

image delete imageName

メモリおよび関連するウィジェットから画像を視覚的に削除します。

2

image height imageName

画像の高さを返します。

3

image width imageName

画像の幅を返します。

4

image type imageName

画像のタイプを返します。

5

image names

メモリ内にある画像のリストを返します。

上記の画像ウィジェットコマンドを使用するための簡単な例を以下に示します-

#!/usr/bin/wish

image create photo imgobj -file "/Users/rajkumar/images/680049.png"
   -width 400 -height 400
pack [label .myLabel]
.myLabel configure -image imgobj
puts [image height imgobj]
puts [image width imgobj]
puts [image type imgobj]
puts [image names]
image delete imgobj

「image delete imgobj」コマンドが実行されると、画像は視覚的におよびメモリから削除されます。 コンソールでは、出力は次のようになります-

400
400
photo
imgobj ::tk::icons::information ::tk::icons::error ::tk::icons::
warning ::tk::icons::question

Tk-イベント

最も単純な形式のイベントは、コマンドを使用して処理されます。 イベント処理の簡単な例は、ボタンを使用したイベント処理であり、以下に示されています-

#!/usr/bin/wish

proc myEvent { } {
   puts "Event triggered"
}
pack [button .myButton1  -text "Button 1"   -command myEvent]

上記のプログラムを実行すると、次の出力が得られます-

イベントの例

遅延テキストアニメーションイベントを表示する簡単なプログラムを以下に示します-

#!/usr/bin/wish

proc delay {} {
   for {set j 0} {$j < 100000} {incr j} {}
}

label .myLabel -text "Hello................" -width 25
pack .myLabel
set str "Hello................"
for {set i [string length $str]} {$i > -2} {set i [expr $i-1]} {
   .myLabel configure -text [string range $str 0 $i]
   update
   delay
}

プログラムを実行すると、アニメーション化された方法で次の出力が得られます-

イベント例3

遅延後のイベント

遅延後のイベントの構文は次のとおりです-

after milliseconds number command

遅延イベント後に表示する簡単なプログラムを以下に示します-

#!/usr/bin/wish

proc addText {} {
   label .myLabel -text "Hello................" -width 25
   pack .myLabel
}
after 1000 addText

プログラムを実行すると、1秒後に次の出力が得られます-

イベント例2

以下に示すように、キャンセル後のコマンドを使用してイベントをキャンセルできます-

#!/usr/bin/wish

proc addText {} {
   label .myLabel -text "Hello................" -width 25
   pack .myLabel
}
after 1000 addText
after cancel addText

イベントのバインド

イベントバインディングの構文は次のとおりです-

bind arguments

キーボードイベントの例

#!/usr/bin/wish

bind .  {puts "Key Pressed: %K "}

私たちはプログラムを実行して文字Xを押すと、次の出力が得られます-

Key Pressed: X

マウスイベントの例

#!/usr/bin/wish

bind .  {puts "Button %b Pressed : %x %y "}

私たちはプログラムを実行し、マウスの左ボタンを押すと、次のような出力が得られます-

Button 1 Pressed : 89 90

ボタンとイベントのリンクの例

#!/usr/bin/wish

proc myEvent { } {
   puts "Event triggered"
}
pack [button .myButton1  -text "Button 1"   -command myEvent]
bind .  ".myButton1 invoke"

プログラムを実行してEnterキーを押すと、次の出力が得られます-

Event triggered

Tk-Windowsマネージャー

ウィンドウマネージャは、トップレベルウィンドウを処理するために使用されます。 ウィンドウのサイズ、位置、およびその他の属性の制御に役立ちます。 Tkでは、 メインウィンドウを参照するために使用されます。 ウィンドウコマンドの構文は以下に示されています-

wm option window arguments

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

アルファ、フルスクリーンなどの多くの属性が利用可能です。

上記のコマンドのいくつかは、次の例で使用されています-

#!/usr/bin/wish

wm maxsize . 800 800
wm minsize . 300 300
wm title . "Hello"
wm attributes . -alpha ".90"
wm geometry . 300x200+100+100

上記のプログラムを実行すると、次の出力が得られます-

ウィンドウマネージャー

ご覧のとおり、アルファは使用可能な属性の1つです。 一般的に使用されるサブコマンドのリストは以下のとおりです-

Sr.No. Syntax & Description
1

-alpha number

ウィンドウのアルファを設定します。

2

-fullscreen number

数値は、通常画面の場合は0、全画面の場合は1です。

3

-topmost number

ウィンドウが最上位かどうかを設定または返します。値は0または1です。

作成ウィンドウ

私たちはトップレベルのコマンドを使用してウィンドウを作成することができ、例を以下に示します-

#!/usr/bin/wish

toplevel .t

上記のプログラムを実行すると、次の出力が得られます-

Window Manager2

破壊ウィンドウ

destroyコマンドを使用してウィンドウを破棄できます。例を以下に示します-

#!/usr/bin/wish

destroy .t

上記のコマンドは、*。t *という名前のウィンドウを破壊します。

Tk-ジオメトリマネージャー

ジオメトリマネージャは、ウィンドウおよび他のフレームのジオメトリを管理するために使用されます。 これを使用して、ウィンドウとフレームの位置とサイズを処理できます。 リンク:/tcl-tk/tk_layout_widgets [レイアウトウィジェット]は、この目的で使用されます。

位置決めとサイジング

ウィンドウの配置とサイズ変更の構文は次のとおりです-

wm geometry . wxh&plus;/-x&plus;/-y

ここで、wは幅を示し、hは高さを示します。 その後に「&plus;」が続きますまたは、画面上のxの位置を次に示す数字の「-」記号 同様に、次の「&plus;」または番号付きの「-」記号は、画面上のy位置を示します

上記のステートメントの簡単な例を次に示します-。

#!/usr/bin/wish

wm geometry . 300x200+100+100

上記のプログラムを実行すると、次の出力が得られます-

GeometryManager1の例

グリッドジオメトリ

グリッドジオメトリの構文は以下に示されています-

grid gridName -column number -row number -columnspan number -rowspan number

列、行、列スパン、または行スパンは、グリッドジオメトリの提供に役立ちます。

上記のステートメントの簡単な例を以下に示します-

#!/usr/bin/wish

frame .myFrame1 -background red  -height 100 -width 100
frame .myFrame2 -background blue -height 100 -width 50
grid .myFrame1 -columnspan 10 -rowspan 10 -sticky w
grid .myFrame2 -column 10 -row 2

上記のプログラムを実行すると、次の出力が得られます-

グリッドジオメトリ