GUIのスクリプト
Wolfram言語コードを実行することで動的動作が GUIKit ユーザインターフェースに加えられる.こうすることで,定義の一部が他の部分とインタラクトできるようになる.つまり,例えばボタンがクリックされたりメニュー項目が選ばれたりしたときの動作が指定できるようになる.
GUIKit の定義はScript[expr]式でWolfram言語を呼び出す.この式は"定義構築ブロック"で説明されているように定義に置くことができる.Scriptは最初は未評価のWolfram言語コードのブロックを定義する.Scriptシンボルには属性HoldAllCompleteがある.インターフェース定義中のScript[expr]ブロックは,通常それ自身によってインターフェース定義の中でインターフェースで使われる共通のWolfram言語関数の定義に使われるか,あるいはBindEvent["eventName",Script[expr]]の引数として特定のインターフェースイベントが起ったときに実行されるWolfram言語関数の定義に使われるかする.インターフェース定義の中でのScript[]の使用は,多くの点で,JavaScriptを埋め込んだコードでHTMLページを補う技術と同じである.
この例題は,Script[]を使った両方の一般的な場合を示している.Wolfram言語関数のprintMessage[]を定義するスタンドアロンのScript[] ブロックと,イベントがトリガされるたびにprintMessage[]関数を実行するボタンイベントに付けられたScriptブロックとが含まれている.
Needs["GUIKit`"];次は,一般的なプラットフォームでユーザインターフェースが描画するもののスクリーンショットである.
GUIRunModal[
Widget["Button", {
"text" -> "execute",
BindEvent["action",
Script[printMessage["button pressed"]]],
BindEvent["mouseEntered",
Script[printMessage["mouse entered button area"]]],
BindEvent["mouseExited",
Script[printMessage["mouse left button area"]]],
Script[
printMessage[message_] := Print[message]]
}]
]GUIKit のフレームワークには,定義のルートウィジェットが,すでにウィンドウあるいはフレームではないが,少なくともウィンドウに加えることができるウィジェットであるという場合には,定義を適切なウィンドウで自動的にラップするという便利な機能があるので,ボタンひとつで作業定義を作ることができる.
ボタンのイベントにスクリプトを加える場合に,どうしたら使用すべきイベント名が分かるだろうか.提供されるもとになっているJavaイベントオブジェクトについての知識があれば,ウィジェットに関するJavaの命名規約に従って適切な文字列名を決めることができるだろう.あるいは,実行中の"Button"ウィジェットとインタラクトすれば,GUIObjectインスタンスとともに使える,あるいはScript[] ブロック内で使えるGUIInformation["widgetName"]関数を使って有効な名前のリストについてのクエリを行うことができるだろう.
ref = GUIRun[
Widget["Button", {"text" -> "実行"}, Name -> "myButton"] ]"WidgetNames" /. GUIInformation[ref ]"EventNames" /. GUIInformation[ref, "myButton"]これは,コンテキスト環境は実行されているGUIObjectから継承されるので,引数のないGUIInformation[]あるいは最初の引数を落としたGUIObjectもScript[]ブロックの中から呼べるという事実を使ったひとつの代替案である.
GUIRunModal[
Widget["Button",
{"text" -> "実行",
Script[ Print["EventNames" /. GUIInformation["myButton"]]]},
Name -> "myButton"]
]もしも同じスクリプト機能を使う複数のGUIがある場合は,コードを独立したファイルに入れてScriptSourceオプション内のScript定義から参照することができる.これについてはチュートリアルの「スコープ」と「配備」に関する箇所に説明がある.