GUI を作成するには、App Designer や GUIDE を使用したり、プログラムで作成したりする方法がいくつかあります(このオプションについては以下で説明します)。GUI コンポーネントのコールバック関数を定義するさまざまな方法と、コンポーネント間でデータを共有するために使用できるオプションを認識することも重要です。
私が好きなアプローチは、ネストされた関数をコールバックとして使用することです。例として簡単な GUI を次に示します。
function make_useless_button()
% Initialize variables and graphics:
iCounter = 0;
hFigure = figure;
hButton = uicontrol('Style', 'pushbutton', 'Parent', hFigure, ...
'String', 'Blah', 'Callback', @increment);
% Nested callback function:
function increment(~, ~)
iCounter = iCounter+1;
disp(iCounter);
end
end
このコードを実行すると、表示されるカウンターは、ボタンを押すたびに 1 ずつ増加します。これは、ネストされた関数increment
が のワークスペースにアクセスできるため、make_useless_button
を変更できるためiCounter
です。ボタン コールバックは への関数ハンドルに設定されてincrement
おり、この関数はデフォルトで 2 つの引数を受け入れる必要があることに注意してください。コールバックをトリガーした UI コンポーネントのグラフィックス ハンドルと、関連付けられたイベント データの構造です。この場合、それらを使用していないため、 でそれらを無視します。~
上記のアプローチを特定の問題に拡張すると、ループを追加してコールバックを変更し、フラグ変数を false に設定できます。
function make_stop_button()
% Initialize variables and graphics:
keepLooping = true;
hFigure = figure;
hButton = uicontrol('Style', 'pushbutton', 'Parent', hFigure, ...
'String', 'Stop', 'Callback', @stop_fcn);
% Keep looping until the button is pressed:
while keepLooping,
drawnow;
end
% Delete the figure:
delete(hFigure);
% Nested callback function:
function stop_fcn(~, ~)
keepLooping = false;
end
end
drawnow
ボタン コールバックに、ループ内のプログラム フローを中断して の値を変更する機会を与えるために、 が必要ですkeepLooping
。