ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

waitbar

ウェイト バーのダイアログ ボックスを開くまたは更新する

構文

h = waitbar(x,'message')
waitbar(x,'message','CreateCancelBtn','button_callback')
waitbar(x,'message',property_name,property_value,...)
waitbar(x)
waitbar(x,h)
waitbar(x,h,'updated message')

説明

ウェイト バーは、計算の進行に伴ってバーを左から右に赤で色付けしていくことにより、計算が終了した割合を示す Figure です。

h = waitbar(x,'message') は、長さの割合が x のウェイト バーを表示します。ウェイト バー Figure は、制御するコードによって閉じられるまで、あるいは [ウィンドウを閉じる] ボタンをクリックするまで表示されます。ウェイト バーの Figure のハンドル番号は、h に返されます。引数 x は、01 の間の数値でなければなりません。

    メモ:   ウェイト バーは、モーダルな Figure ではありません (WindowStyle'normal' です)。ウェイト バーがモーダルのように表示される場合が多いのは、ウェイト バーの呼び出し元の計算ループが終了するまで、コマンド ウィンドウとの対話が妨げられるためです。詳細は、MATLAB®「Figure Properties」ドキュメンテーションの「WindowStyle」を参照してください。

CreateCancelBtn を指定する waitbar(x,'message','CreateCancelBtn','button_callback') は、ユーザーが [キャンセル] ボタンか [Figure を閉じる] ボタンをクリックしたときに、button_callback で指定した MATLAB コマンドを実行する Figure に [キャンセル] ボタンを追加します。waitbar は、[キャンセル] ボタンのコールバックと Figure の CloseRequestFcn を両方とも button_callback で指定された文字列に設定します。

waitbar(x,'message',property_name,property_value,...) のオプション引数 property_nameproperty_value を使用すると、waitbarFigure Properties を設定することができます。

waitbar(x) のそれ以降の waitbar(x) の呼び出しによって、バーの長さが新しい位置 x まで延長されます。x の連続値は通常増加します。減少すると、ウェイト バーが逆方向に進みます。

waitbar(x,h) は、ウェイト バーのバーの長さ h を新しい位置 x まで伸ばします。

waitbar(x,h,'updated message') は、長さの割合を全体の x に設定する以外に、waitbar Figure のメッセージ テキストを更新します。

例 1 — 基本のウェイト バー

waitbar は通常、長時間の計算を行う for ループの中で繰り返し呼び出されます。以下に例を示します。

h = waitbar(0,'Please wait...');
steps = 1000;
for step = 1:steps
    % computations take place here
    waitbar(step / steps)
end
close(h) 

例 2 — 動的テキストおよび [キャンセル] ボタンをもつウェイト バー

[キャンセル] ボタンを追加すると、ユーザーは計算を中止できます。このボタンをクリックすると、Figure のアプリケーション データ (appdata) の論理フラグが設定されます。関数はメイン ループ内でその値をテストし、フラグが設定されるとすぐにループを終了します。この例はπの値を反復近似します。各ステップでは、現在の値は文字列としてエンコードされ、ウェイト バーのメッセージ フィールドに表示されます。関数が終了すると、ウェイト バーを破棄し、πの現在推定値と実行されたステップ数を返します。

以下の関数をコード ファイルにコピーして approxpi.m として保存します。10,000 回の反復ができるよう、以下のように実行します。

[estimated_pi steps] = approxpi(10000)

[キャンセル] をクリックするかウィンドウを閉じ、計算を停止してπの現在推定値を返します。

function [valueofpi step] = approxpi(steps)
% Converge on pi in steps iterations, displaying waitbar.
% User can click Cancel or close button to exit the loop.
% Ten thousand steps yields error of about 0.001 percent.

h = waitbar(0,'1','Name','Approximating pi...',...
            'CreateCancelBtn',...
            'setappdata(gcbf,''canceling'',1)');
setappdata(h,'canceling',0)
% Approximate as pi^2/8 = 1 + 1/9 + 1/25 + 1/49 + ...
pisqover8 = 1;
denom = 3;
valueofpi = sqrt(8 * pisqover8);
for step = 1:steps 
    % Check for Cancel button press
    if getappdata(h,'canceling')
        break
    end
    % Report current estimate in the waitbar's message field
    waitbar(step/steps,h,sprintf('%12.9f',valueofpi))
    % Update the estimate
    pisqover8 = pisqover8 + 1 / (denom * denom);
    denom = denom + 2;
    valueofpi = sqrt(8 * pisqover8);
end
delete(h)       % DELETE the waitbar; don't try to CLOSE it.

この関数は、Figure の Name プロパティを設定して計算対象を記述します。for ループでは、waitbar を呼び出すと、分数進行インジケーターが設定され、中間結果が表示されます。コード waitbar(i/steps,h,sprintf('%12.9f',valueofpi)) はウェイト バーの message 変数を pi の現在推定値の文字列表現に設定します。余分な計算があると、反復が必要以上に長引きますが、そのようなフィードバックはユーザーにとって有益な場合があります。

    メモ:   先行するコードと同様に、ウェイト バー に CloseRequestFcn を指定するには、関数 delete を呼び出してウェイト バーを削除する必要があります。関数 close を呼び出してもウェイト バーは閉じません。代わりに、[キャンセル] ボタンと [ウィンドウを閉じる] ボタンが無反応になります。こうなるのは、Figure の CloseRequestFcn が再帰的にそれ自身を呼び出すからです。このような場合、ウェイト バーを以下のように強制的に削除する必要があります。

    set(0,'ShowHiddenHandles','on')
    delete(get(0,'Children'))

    ただし、これらのコマンドを発行すると、ウェイト バーだけでなく開いているすべての Figure が削除されるので、ウィンドウを削除するために CloseRequestFcn で関数 close を使用するのは避けるのが最善です。

参考

| | | | |

この情報は役に立ちましたか?