(tof) MANUAL.euc Sep. 19, 1997 Y. Shigehiro 以下, 「tcl/tk」という表記は, tclsh や wish を実現している, 一般でいう ところの tcl/tk を指します. 「tcltk ライブラリ」, 「tcltklib ライブラ リ」という表記は, 本パッケージに含まれる ruby 用のライブラリを指します. << tcltk ライブラリ >> tcl/tk の C ライブラリを利用するための高(中?)水準インターフェースを提 供します. このライブラリは ruby から tcl/tk ライブラリを利用するためのもので, 内 部で tcltklib ライブラリを利用しています. [説明] tcl/tk インタプリタでは, ウィジェットに何か指示を送るには, ウィジェッ ト名に続いてパラメータを書きます. したがって, ウィジェットがオブジェク トであり, それに対してメソッドを送っている, とみなすことができます. さ て, tcl/tk インタプリタでは, 組み込みコマンドも, 前述のウィジェットと 同じような書式の命令で実行されます. すなわち, コマンドもオブジェクトで あると考えることができます. このような考えに基づき, tcltk ライブラリでは, tcl/tk のコマンドやウィ ジェットに対応するオブジェクトを生成します. オブジェクトに対するメソッ ド呼び出しは, e() メソッドにより実行されます. 例えば, tcl/tk の info コマンドに対応する ruby のオブジェクトが info という名前であるとすると, tcl/tk の info commands という命令は tcltk ライブラリでは info.e("commands") と記述されます. また, 「.」というウィジェット (wish 実行時に自動的に生 成されるルートウィジェット) に対応する ruby のオブジェクトが root とい う名前であるとすると, . configure -height 300 -width 300 という tcl/tk の命令は root.e("configure -height 300 -width 300") と記述されます. このような記述は, 見ためには美しくありませんが, そして, スクリプトを読む人には見づらいかも知れませんが, 実際にスクリプトを書い てみると予想外に手軽です. [使用法] 1. ライブラリを読み込む. require "tcltk" 2. tcl/tk インタプリタを生成する. ip = TclTkInterpreter.new() 3. tcl/tk のコマンドに対応するオブジェクトを変数に代入しておく. # コマンドに対応するオブジェクトが入った Hash を取り出す. c = ip.commands() # 使いたいコマンドに対応するオブジェクトを個別の変数に代入する. bind, button, info, wm = c.indexes("bind", "button", "info", "wm") 4. 必要な処理を行う. 詳しくは, サンプルを参照のこと. 5. 準備ができたら, イベントループに入る. TclTk.mainloop() (( 以下, モジュール, クラス等の説明を書く予定.)) << tcltklib ライブラリ >> tcl/tk の C ライブラリを利用するための低水準インターフェースを提供しま す. コンパイル/実行には, tcl/tk の C ライブラリが必要です. [説明] このライブラリを用いると, ruby から tcl/tk の C ライブラリを利用できま す. 具体的には, ruby インタプリタから tcl/tk インタプリタを呼び出すこ とができます. さらに, その(ruby インタプリタから呼び出した) tcl/tk イ ンタプリタから, 逆に ruby インタプリタを呼び出すこともできます. [使用法] require "tcltklib" すると, 以下のモジュール, クラスが利用可能です. モジュール TclTkLib tcl/tk ライブラリを呼び出すメソッドを集めたモジュールです. ただし, tcl/tk インタプリタ関係のメソッドはクラス TclTkIp にあります. モジュールメソッド mainloop() Tk_MainLoop を実行します. 全ての tk のウインドウが無くなると終了 します(例えば, tcl/tk で書くところの "destroy ." をした場合等). 引数: 無し 戻り値: nil クラス TclTkIp インスタンスが tcl/tk のインタプリタに対応します. tcl/tk のライブ ラリの仕様通り, インスタンスを複数個生成しても正しく動作します(そ んなことをする必要はあまり無いはずですが). インタプリタは wish の tcl/tk コマンドを実行できます. さらに, 以下のコマンドを実行できま す. コマンド ruby 引数を ruby で実行します(ruby_eval_string を実行します). 引数 は 1 つでなければなりません. 戻り値は ruby の実行結果です. ruby の実行結果は nil か String でなければなりません. クラスメソッド new() TclTkIp クラスのインスタンスを生成します 引数: 無し 戻り値 (TclTkIp): 生成されたインスタンス メソッド _eval(script) インタプリタで script を評価します(Tcl_Eval を実行します). 前述 のように, ruby コマンドにより script 内から ruby スクリプトを実 行できます. 引数: script (String) - インタプリタで評価するスクリプト文字列 戻り値 (String): 評価結果 ((Tcl_Interp *)->result) メソッド _return_value() 直前の Tcl_Eval の戻り値を返します. 0(TCL_OK) で正常終了です. 引数: 無し 戻り値 (Fixnum): 直前の Tcl_Eval() が返した値. (eof)