print ($x + "\n");
window -title "test" window1;
columnLayout;
button -label "Close" -command "deleteUI window1; // エラーがある
showWindow;
この時、window コマンドは正常に実行されて window1 という名前のウインドウが作られています。
しかし、showWindow が実行されていないので表示はされません。
global proc testWindow()
{
$winName = `window -title "test"`;
columnLayout;
button -label "Close" -command "deleteUI $winName";
showWindow;
}
$winName という変数に作られたウインドウの名前を代入していますが、
この変数はプロシージャー testWindow の内部変数なので、
このプロシージャの実行が終るとともに消えてしまいます。
ですから、ボタンを押した時には deleteUI コマンドによって $winName を参照しようとしても失敗してしまいます。
string $winName; // 外部変数$winName
global proc testWindow()
{
global string $winName; // この変数は外部変数の$winName
$winName = `window -title "test"`;
columnLayout;
button -label "Close" -command "deleteUI $winName";
showWindow;
}
または、以下のようにウインドウの名前をコマンドの文字列へあらかじめ入れておきます。
global proc testWindow()
{
$winName = `window -title "test"`;
columnLayout;
button -label "Close" -command ("deleteUI " + $winName);
showWindow;
}
window;
columnLayout;
setParent ..; // 省略しない
showWindow;
これでウインドウを表示しておいてから button コマンドなどを実行すると、
実行するたびに部品が追加されてゆきます。
uiTemplate testTemplate; // テンプレートオブジェクトを作る
columnLayout -defineTemplate testTemplate // そのテンプレートオブジェクトに対して定義する
-columnAlign right
-columnOffset right 10
-columnWidth 20
-rowSpacing 10;
window;
columnLayout -useTemplate testTemplate;
button -label "test1";
button -label "test2";
showWindow;