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ファイルを作成しましょう。 これを最初のプログラムとして使用し、選択したプラットフォームで実行します。
#!/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 |+ - |Right to left |Multiplicative |*/% |Left to right |Additive |+ - |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」ステートメントは、ブール式とそれに続く1つ以上のステートメントで構成されます。 |
2 |
「if」ステートメントの後にオプションの「else」ステートメントを続けることができます。これは、ブール式が偽の場合に実行されます。 |
3 |
1つの「if」または「else if」ステートメントを別の「if」または「else if」ステートメント内で使用できます。 |
4 |
|
5 |
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 |
特定の条件が真の間、ステートメントまたはステートメントのグループを繰り返します。 ループ本体を実行する前に条件をテストします。 |
2 |
一連のステートメントを複数回実行し、ループ変数を管理するコードを短縮します。 |
3 |
while、for、またはdo..whileループ内で1つ以上のループを使用できます。 |
ループ制御ステートメント
ループ制御ステートメントは、通常のシーケンスから実行を変更します。 実行がスコープを離れると、そのスコープで作成されたすべての自動オブジェクトが破棄されます。
Tclは次の制御ステートメントをサポートしています。
Sr.No. | Control Statement & Description |
---|---|
1 |
ループまたはスイッチステートメントを終了し、ループまたはスイッチの直後のステートメントに実行を転送します。 |
2 |
ループがその本体の残りをスキップし、反復する前にその状態をすぐに再テストします。 |
無限ループ
条件が決して偽にならない場合、ループは無限ループになります。 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 |
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文字列サブコマンドの例を以下に示します。
文字列比較
#!/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 |
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ビット数の場合は符号拡張により)。 |
数学関数を使用したいくつかの例を以下に示します-
#!/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キーを押すと、次のような出力が表示されます-
Linuxへのインストール
ほとんどのLinuxオペレーティングシステムにはTkが組み込まれているため、これらのシステムですぐに使用を開始できます。 使用できない場合は、次のコマンドを使用してTcl-Tkをダウンロードおよびインストールできます。
$ yum install tcl tk
今、私たちは、* cdコマンド*を使用してファイルを含むフォルダに切り替えてから次のステップを使用してhelloWorld.tclなどのTclファイルを構築して実行することができます-
$ wish helloWorld.tcl
Enterを押すと、次のような出力が表示されます-
Debianベースのシステムへのインストール
あなたのOSで事前に構築されていない場合には、次のコマンドを使用してTcl-Tkをダウンロードしてインストールすることができます-
$ sudo apt-get install tcl tk
今、私たちは* cdコマンド*を使用してファイルを含むフォルダに切り替えてから次の手順を使用して、helloWorld.tclなどのTclファイルを構築して実行することができます-
$ wish helloWorld.tcl
Enterを押すと、次のような出力が表示されます-
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キーを押すと、次のような出力が表示されます-
ソースファイルからのインストール
バイナリパッケージが利用できない場合、ソースファイルからインストールするオプションを使用できます。 一般に、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
上記のプログラムを実行すると、次の出力が得られます。
利用可能なウィジェットのリストは以下に分類されます-
基本的なウィジェット
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の例を以下に示します-
#!/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 |
他のウィジェットを保持するコンテナウィジェット。 |
2 |
原点の座標と正確なサイズで特定の場所に他のウィジェットを保持するウィジェット。 |
3 |
ウィジェットを親ウィジェットに配置する前にブロックで整理するシンプルなウィジェット。 |
4 |
異なる方向にパッキングするウィジェットをネストするウィジェット。 |
シンプルな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 |
オン/オフボタンとラベルのセットがあり、そのうちの1つを選択できるウィジェット。 |
2 |
オン/オフボタンとラベルのセットがあり、その多くを選択できるウィジェット。 |
3 |
メニュー項目のホルダーとして機能するウィジェット。 |
4 |
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で描画するためのウィジェット
キャンバスでの描画に使用可能なウィジェットのリストは以下のとおりです-
Sr.No. | Widget & Description |
---|---|
1 |
線を引きます。 |
2 |
弧を描きます。 |
3 |
長方形を描画します。 |
4 |
楕円を描画します。 |
5 |
多角形を描画します。 |
6 |
テキストを描画します。 |
7 |
ビットマップを描画します。 |
8 |
画像を描画します。 |
異なるキャンバスウィジェットを使用した例を以下に示します-
#!/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
上記のプログラムを実行すると、次の出力が得られます-
Tk-メガウィジェット
メガウィジェットには、大規模なTkアプリケーションでしばしば必要とされる多くの複雑なウィジェットが含まれています。 利用可能なメガウィジェットのリストは以下のとおりです-
Sr.No. | Widget & Description |
---|---|
1 |
ダイアログボックスを表示するためのウィジェット。 |
2 |
ユーザーが数字を選択できるウィジェット。 |
3 |
エントリと、使用可能な選択肢のリストを組み合わせたウィジェット。 |
4 |
インデックスタブを使用して、複数のページの1つを切り替えるのに役立つタブ付きウィジェット。 |
5 |
ファイルのアップロードなどの長い操作の進行状況を視覚的にフィードバックするウィジェット。 |
6 |
ツリーの形式でアイテムの階層を表示し、閲覧できるウィジェット。 |
7 |
テキストまたはキャンバスウィジェットなしのスクロールウィジェット。 |
8 |
スライダーを使用して数値を選択するウィジェットを拡大縮小します。 |
いくつかのメガウィジェットを使用した簡単な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
}
プログラムを実行すると、アニメーション化された方法で次の出力が得られます-
遅延後のイベント
遅延後のイベントの構文は次のとおりです-
after milliseconds number command
遅延イベント後に表示する簡単なプログラムを以下に示します-
#!/usr/bin/wish
proc addText {} {
label .myLabel -text "Hello................" -width 25
pack .myLabel
}
after 1000 addText
プログラムを実行すると、1秒後に次の出力が得られます-
以下に示すように、キャンセル後のコマンドを使用してイベントをキャンセルできます-
#!/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
上記のプログラムを実行すると、次の出力が得られます-
破壊ウィンドウ
destroyコマンドを使用してウィンドウを破棄できます。例を以下に示します-
#!/usr/bin/wish
destroy .t
上記のコマンドは、*。t *という名前のウィンドウを破壊します。
Tk-ジオメトリマネージャー
ジオメトリマネージャは、ウィンドウおよび他のフレームのジオメトリを管理するために使用されます。 これを使用して、ウィンドウとフレームの位置とサイズを処理できます。 リンク:/tcl-tk/tk_layout_widgets [レイアウトウィジェット]は、この目的で使用されます。
位置決めとサイジング
ウィンドウの配置とサイズ変更の構文は次のとおりです-
wm geometry . wxh+/-x+/-y
ここで、wは幅を示し、hは高さを示します。 その後に「&plus;」が続きますまたは、画面上のxの位置を次に示す数字の「-」記号 同様に、次の「&plus;」または番号付きの「-」記号は、画面上のy位置を示します
上記のステートメントの簡単な例を次に示します-。
#!/usr/bin/wish
wm geometry . 300x200+100+100
上記のプログラムを実行すると、次の出力が得られます-
グリッドジオメトリ
グリッドジオメトリの構文は以下に示されています-
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
上記のプログラムを実行すると、次の出力が得られます-