必要な要素をすべて含むウィンドウが完成したら、このウィンドウに何か付け加えたくなることもあるでしょう。各コントロールは、ユーザのアクションによってトリガされた MEL コマンドやプロシージャを実行できます。コントロールでサポートされているアクションのタイプは、それぞれのコントロールの性質によって異なります。たとえば、ボタンは押したときにコマンドの実行だけをサポートし、スライダはドラッグするか値を変更したときに、コマンドをサポートします。各コントロールでサポートされているコールバックのリストについては、コマンドのマニュアルを参照してください。
単純な例としては、ボタンにコマンドをアタッチする場合が挙げられます。次のコマンドでは、ボタンを押すとボタンのラベル テキストが変更されます。
window -width 200 -title "Test Window" ExampleWindow5;
columnLayout;
// Create the button.
//
string $button = `button -label "Initial Label"`;
// Add the command.
//
string $buttonCmd;
$buttonCmd = ("button -edit -label \"Final Label\" " + $button);
button -edit -command $buttonCmd $button;
showWindow ExampleWindow5;
この例では、ボタンにコマンドが 1 つアタッチされます。引数を持つプロシージャをアタッチするのも同じくらい簡単です。次の例は、前述の例を少し変更したものです。
window -title "Test Window" -widthHeight 200 100 ExampleWindow6;
columnLayout;
// Create the button.
//
string $button = `button -label "Initial Label"`;
// Add the command.
//
button -edit -command ("changeButtonLabel " + $button) $button;
showWindow ExampleWindow6;
proc changeButtonLabel (string $whichButton) {
string $labelA;
string $labelB;
string $currentLabel;
$currentLabel = `button -query -label $whichButton`;
$labelA = "New Label A";
$labelB = "New Label B";
if ($currentLabel != $labelA) {
button -edit -label $labelA $whichButton;
} else {
button -edit -label $labelB $whichButton;
}
}
実行されるコマンドのパラメータとして、コントロールの値が必要なことがよくあります。状態が変わるたびにコントロールを照会しなくても済むように、コントロールの値を文字列「#1」としてコマンドに埋め込むことができます。コントロールの値が変わると、そのコマンドを送るときに「#1」がコントロールの実際の値に置き換えられます。複数の値を持つグループは異なるコンポーネントの値に対して、「#2」、「#3」などを使用します。たとえば、3 つのフィールドがある float フィールド グループは、「#1」、「#2」、「#3」を使用して、コマンドで各フィールドの値を表すことができます。
ノードのアトリビュートの値を表示したり、アトリビュートが変更されたときに更新されるコントロールが必要になることはよくあります。これを実現するには、コントロールの 'attr' バージョン、つまり floatFieldGrp の代わりに attrFieldGrp を使用すると最も簡単です。'attr' コマンドが存在しない場合は、connectControl コマンドを使用します。