必要な要素をすべて含むウィンドウを作成すると、何か付け加えたくなることもあるでしょう。各コントロールは、ユーザのアクションによってトリガされた 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 コマンドを使用します。