最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
メモ
GUIDE 環境は将来のリリースで削除される予定です。既存の GUIDE アプリは、GUIDE が削除された後も引き続き MATLAB® で動作しますが、GUIDE での編集はできません。
既存の GUIDE アプリを引き続き編集するには、将来の MATLAB リリースとの互換性維持に役立つ方法について、GUIDE の移行策を参照してください。新しいアプリを対話的に作成する場合は、代わりにApp Designer を使用したアプリ開発を参照してください。
UI コンポーネントの動作をコード化する作業には、操作するコンポーネントのタイプに固有のタスクが伴います。このトピックには、各タイプのコンポーネントに対応するコールバックの簡単な例がいくつかあります。コールバックのコード化についての一般情報は、GUIDE でのコールバックの作成またはプログラムによって作成されたアプリのコールバックの記述を参照してください。
GUIDE を使用している場合は、レイアウト内のコンポーネントを右クリックし、[コールバックの表示] メニューから適切なコールバック プロパティを選択します。これにより、空のコールバック関数が作成され、自動的にコンポーネントに関連付けられます。GUIDE が作成する特定の関数名はコンポーネントの Tag
プロパティに基づくので、実際の関数名がコード例の関数名とは少し異なる場合があります。GUIDE がコード内に作成した関数名を変更しないでください。作成しているアプリ内でコード例を使用するには、例の関数本体から自分の関数本体にコードをコピーします。
次のコードは、GUIDE におけるプッシュ ボタンのコールバック関数の例です。エンド ユーザーがプッシュ ボタンをクリックしたときに関数が実行されるようにするには、この関数をプッシュ ボタンの Callback
プロパティに関連付けます。
function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) display('Goodbye'); close(gcf);
コードの第 1 行の display('Goodbye')
は、コマンド ウィンドウに 'Goodbye'
を表示します。次の行は、gcf
を使用して UI ウィンドウを取得してから UI ウィンドウを閉じます。
次のコードは、GUIDE におけるトグル ボタンのコールバック関数の例です。エンド ユーザーがトグル ボタンをクリックしたときに関数が実行されるようにするには、この関数をトグル ボタンの Callback
プロパティに関連付けます。
function togglebutton1_Callback(hObject,eventdata,handles) % hObject handle to togglebutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of togglebutton1 button_state = get(hObject,'Value'); if button_state == get(hObject,'Max') display('down'); elseif button_state == get(hObject,'Min') display('up'); end
トグル ボタンの Value
プロパティは、トグル ボタンがクリックされていない状態のときに Min
プロパティと同じになります。トグル ボタンが押されると、Value
が Max
の値に変わります。このコールバック関数は、トグル ボタンの Value
プロパティを取得し、Max
および Min
のプロパティと比較します。ボタンが押された状態の場合、関数はコマンド ウィンドウに 'down'
を表示します。ボタンが押されていない状態の場合、関数は 'up'
を表示します。
次のコードは、GUIDE におけるラジオ ボタンのコールバック関数の例です。エンド ユーザーがラジオ ボタンをクリックしたときに関数が実行されるようにするには、この関数をラジオ ボタンの Callback
プロパティに関連付けます。
function radiobutton1_Callback(hObject, eventdata, handles) % hObject handle to radiobutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of radiobutton1 if (get(hObject,'Value') == get(hObject,'Max')) display('Selected'); else display('Not selected'); end
ラジオ ボタンの Value
プロパティは、ラジオ ボタンがオフのときに Min
プロパティと同じになります。ラジオ ボタンがオンになると、Value
が Max
の値に変わります。このコールバック関数は、ラジオ ボタンの Value
プロパティを取得し、Max
および Min
のプロパティと比較します。ボタンがオンの場合、関数はコマンド ウィンドウに 'Selected'
を表示します。ボタンがオフの場合、関数は 'Not
selected'
を表示します。
メモ:
ラジオ ボタンの排他的な選択動作を管理するには、ボタン グループを使用します。詳細は、ボタン グループを参照してください。
次のコードは、GUIDE におけるチェック ボックスのコールバック関数の例です。エンド ユーザーがチェック ボックスをクリックしたときに関数が実行されるようにするには、この関数をチェック ボックスの Callback
プロパティに関連付けます。
function checkbox1_Callback(hObject, eventdata, handles) % hObject handle to checkbox1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of checkbox1 if (get(hObject,'Value') == get(hObject,'Max')) display('Selected'); else display('Not selected'); end
チェック ボックスの Value
プロパティは、チェック ボックスがオフのときに Min
プロパティと同じになります。チェック ボックスがオンになると、Value
が Max
の値に変わります。このコールバック関数は、チェック ボックスの Value
プロパティを取得し、Max
および Min
のプロパティと比較します。チェック ボックスがオンの場合、関数はコマンド ウィンドウに 'Selected'
を表示します。チェック ボックスがオフの場合は 'Not
selected'
を表示します。
次のコードは、GUIDE でのエディット テキスト フィールドのコールバックの例です。この関数を uicontrol の Callback
プロパティと関連付けて、エンド ユーザーがテキスト フィールドに入力したときに実行されるようにします。
function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents as double input = get(hObject,'String'); display(input);
テキスト フィールド内に文字を入力して Enter キーを押すと、コールバック関数はそれらの文字を取得し、それをコマンド ウィンドウに表示します。
複数行のテキストを入力可能にするには、Max
と Min
のプロパティを、Max
- Min > 1
を満たす数値に設定します。たとえば、この不等式を満たすように、Max
を 2
に、Min
を 0
に設定します。この例では、エンド ユーザーが UI のテキスト フィールドの外側にある領域をクリックすると、コールバック関数がトリガーされます。
エディット テキスト フィールドの内容を数値として解釈する場合は、関数 str2double
を使用して文字を数値に変換します。数値以外の入力では、関数 str2double
は NaN
を返します。
次のコードは、ユーザー入力を数値として解釈するエディット テキスト フィールドのコールバック関数の例です。
function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents as a double input = str2double(get(hObject,'String')); if isnan(input) errordlg('You must enter a numeric value','Invalid Input','modal') uicontrol(hObject) return else display(input); end
エンド ユーザーがエディット テキスト フィールド内に値を入力して Enter キーを押すと、コールバック関数が String
プロパティの値を取得して数値に変換します。次に、値が NaN
(非数値) かどうかを検査します。入力が NaN
である場合、コールバックはエラー ダイアログ ボックスを表示します。
次のコードは、GUIDE におけるスライダーのコールバック関数の例です。エンド ユーザーがスライダーを移動したときに関数が実行されるようにするには、この関数をスライダーの Callback
プロパティに関連付けます。
function slider1_Callback(hObject, eventdata, handles) % hObject handle to slider1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'Value') returns position of slider % get(hObject,'Min') and get(hObject,'Max') to determine... slider_value = get(hObject,'Value'); display(slider_value);
エンド ユーザーがスライダーを移動すると、コールバック関数がスライダーの現在の値を取得し、コマンド ウィンドウに表示します。スライダーの既定の範囲は [0, 1] です。範囲を変更するには、スライダーの Max
プロパティを最大値、Min
プロパティを最小値に設定します。
GUIDE を使用してアプリを開発している場合、リスト ボックスに項目を追加するには、リスト ボックスの CreateFcn
コールバックを使用します。
次のコードは、リスト ボックスの CreateFcn
コールバックの例であり、リスト ボックスに項目 Red
、Green
、Blue
を事前設定するものです。
function listbox1_CreateFcn(hObject, eventdata, handles) % hObject handle to listbox1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns % Hint: listbox controls usually have a white background on Windows. if ispc && isequal(get(hObject,'BackgroundColor'), ... get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end set(hObject,'String',{'Red';'Green';'Blue'});
set(hObject,'String',{'Red';'Green';'Blue'})
がリスト ボックスの内容を事前設定します。エンド ユーザーがリスト ボックスの項目を選択すると、リスト ボックスの Value
プロパティが、リスト内の項目の位置に対応する数値に変わります。たとえば、値 1
はリストの最初の項目に対応しています。コード内で選択項目を変更する場合は、1
からリスト内の項目数までの範囲で、Value
プロパティを別の数値に変更します。
たとえば、GUIDE で handles
構造体を使用すると、リスト ボックスにアクセスして Value
プロパティを変更できます。
set(handles.listbox1,'Value',2)
最初の引数 handles.listbox1
は、リスト ボックスの Tag
プロパティの値により、実際のコード内では異なる場合があります。
次のコードは、GUIDE におけるリスト ボックスのコールバック関数の例です。エンド ユーザーがリスト ボックス内の項目を選択したときに関数が実行されるようにするには、この関数をリスト ボックスの Callback
プロパティに関連付けます。
function listbox1_Callback(hObject, eventdata, handles) % hObject handle to listbox1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: contents = cellstr(get(hObject,'String')) returns contents % contents{get(hObject,'Value')} returns selected item from listbox1 items = get(hObject,'String'); index_selected = get(hObject,'Value'); item_selected = items{index_selected}; display(item_selected);
エンド ユーザーがリスト ボックス内の項目を選択すると、コールバック関数が次のタスクを実行します。
リスト ボックス内のすべての項目を取得し、変数 items
に格納する。
選択された項目の数値インデックスを取得し、変数 index_selected
に格納する。
選択された項目の値を取得し、変数 item_selected
に格納する。
選択された項目を MATLAB コマンド ウィンドウに表示する。
例GUIDE の対話型リスト ボックスのアプリでは、リスト ボックスにディレクトリ名を事前設定する方法を説明しています。
GUIDE を使用してアプリを開発している場合、ポップアップ メニューに項目を追加するには、ポップアップ メニューの CreateFcn
コールバックを使用します。
次のコードは、ポップアップ メニューの CreateFcn
コールバックの例であり、ポップアップ メニューに項目 Red
、Green
、Blue
を事前設定するものです。
function popupmenu1_CreateFcn(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns % Hint: popupmenu controls usually have a white background on Windows. if ispc && isequal(get(hObject,'BackgroundColor'),... get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end set(hObject,'String',{'Red';'Green';'Blue'});
set(hObject,'String',{'Red';'Green';'Blue'})
がポップアップ メニューの内容を事前設定します。エンド ユーザーが項目を選択すると、ポップアップ メニューの Value
プロパティが、ポップアップ メニュー内の項目の位置に対応する数値に変わります。たとえば、値 1
はリストの最初の項目に対応しています。コード内で選択項目を変更する場合は、1
からポップアップ メニュー内の項目数までの範囲で、Value
プロパティを別の数値に変更します。
たとえば、GUIDE で handles
構造体を使用すると、ポップアップ メニューにアクセスして Value
プロパティを変更できます。
set(handles.popupmenu1,'Value',2)
最初の引数 handles.popupmenu1
は、ポップアップ メニューの Tag
プロパティの値により、実際のコード内では異なる場合があります。
次のコードは、GUIDE におけるポップアップ メニューのコールバック関数の例です。エンド ユーザーがポップアップ メニューから項目を選択したときに関数が実行されるようにするには、この関数をポップアップ メニューの Callback
プロパティに関連付けます。
function popupmenu1_Callback(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: contents = cellstr(get(hObject,'String')) returns contents... % contents{get(hObject,'Value')} returns selected item... items = get(hObject,'String'); index_selected = get(hObject,'Value'); item_selected = items{index_selected}; display(item_selected);
ユーザーがポップアップ メニュー内の項目を選択すると、コールバック関数が次のタスクを実行します。
ポップアップ メニュー内のすべての項目を取得し、変数 items
に格納する。
選択された項目の数値インデックスを取得し、変数 index_selected
に格納する。
選択された項目の値を取得し、変数 item_selected
に格納する。
選択された項目を MATLAB コマンド ウィンドウに表示する。
エンド ユーザーがパネル上で右クリックするか、左クリックするときに実行されるコールバック関数を作成できます。GUIDE を使用している場合は、レイアウト内のパネルを右クリックし、[コールバックの表示] 、 [ButtonDownFcn] を選択して、コールバック関数を作成します。
次のコードは、GUIDE における ButtonDownFcn
コールバックの例です。
function uipanel1_ButtonDownFcn(hObject, eventdata, handles) % hObject handle to uipanel1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) display('Mouse button was pressed');
'Mouse button was pressed'
を表示します。既定では GUIDE UI はサイズを変更できませんが、この動作は [ツール] 、 [GUI オプション] を選択して [サイズ変更の動作] を [比例 (プロポーショナル)] に設定することでオーバーライドできます。
UI ウィンドウのサイズが変更可能な場合、変更したサイズに合わせて、ウィンドウ内のコンポーネントの位置が調整されます。UI にパネルがある場合、パネルのサイズもウィンドウのサイズに合わせて変更されます。パネルのサイズ変更時にアプリで特定のタスクを実行させるには、パネルの SizeChangedFcn
コールバックを使用します。
次のコードは、GUIDE アプリにおけるパネルの SizeChangedFcn
コールバックの例です。ユーザーがウィンドウのサイズを変更すると、この関数はパネル内のスタティック テキストのフォント サイズを変更します。
function uipanel1_SizeChangedFcn(hObject, eventdata, handles) % hObject handle to uipanel1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) set(hObject,'Units','Points') panelSizePts = get(hObject,'Position'); panelHeight = panelSizePts(4); set(hObject,'Units','normalized'); newFontSize = 10 * panelHeight / 115; texth = findobj('Tag','text1'); set(texth,'FontSize',newFontSize);
UI に入れ子にされたパネルが含まれる場合、内側から外側へ (子から親の順に) サイズが変更されます。
メモ
パネル内のテキストのサイズを自動的に変更するには、fontUnits
プロパティを 'normalized'
に設定します。
ボタン グループはパネルに類似していますが、ラジオ ボタンやトグル ボタンでの排他選択も処理できます。ボタン グループにラジオ ボタンまたはトグル ボタンが複数ある場合、ボタン グループによりこれらのうちの 1 つのみが選択可能になります。
ボタン グループ内の個々のボタンについてコールバックのコードを作成しないでください。代わりに、ボタン グループの SelectionChangedFcn
コールバックを使用して、エンド ユーザーがボタンを選択したときの応答を作成してください。
次のコードは、2 つのラジオ ボタンと 2 つのトグル ボタンを処理するボタン グループの SelectionChangedFcn
コールバックの例です。
function uibuttongroup1_SelectionChangedFcn(hObject, eventdata, handles) % hObject handle to the selected object in uibuttongroup1 % eventdata structure with the following fields % EventName: string 'SelectionChanged' (read only) % OldValue: handle of the previously selected object or empty % NewValue: handle of the currently selected object % handles structure with handles and user data (see GUIDATA) switch get(eventdata.NewValue,'Tag') % Get Tag of selected object. case 'radiobutton1' display('Radio button 1'); case 'radiobutton2' display('Radio button 2'); case 'togglebutton1' display('Toggle button 1'); case 'togglebutton2' display('Toggle button 2'); end
ボタン グループのラジオ ボタンまたはトグル ボタンをエンド ユーザーが選択すると、この関数はボタンの Tag
プロパティに基づいて、エンド ユーザーが選択したボタンを特定します。次に、適切な case
内のコードを実行します。
メモ
ボタン グループの SelectedObject
プロパティには、ユーザーが選択したボタンのハンドルが含まれます。コード内の任意の場所でこのプロパティを使用して、ユーザーが選択したボタンを特定できます。
この節のコードには、エンド ユーザーがこのメニューの [Edit] 、 [Copy] 、 [To File] を選択したときに応答するコールバック関数の例が含まれています。
% -------------------------------------------------------------------- function edit_menu_Callback(hObject, eventdata, handles) % hObject handle to edit_menu (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) display('Edit menu selected'); % -------------------------------------------------------------------- function copy_menu_item_Callback(hObject, eventdata, handles) % hObject handle to copy_menu_item (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) display('Copy menu item selected'); % -------------------------------------------------------------------- function tofile_menu_item_Callback(hObject, eventdata, handles) % hObject handle to tofile_menu_item (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [filename,path] = uiputfile('myfile.m','Save file name');
コールバック関数は、次の操作に応答してトリガーされます。
エンド ユーザーが [Edit] メニューを選択すると、関数 edit_menu_Callback
がテキスト 'Edit menu selected'
を MATLAB コマンド ウィンドウに表示します。
エンド ユーザーがポインターを [Copy] メニュー項目に合わせると、関数
copy_menu_item_Callback
がテキスト 'Copy menu item selected'
を MATLAB コマンド ウィンドウに表示します。
エンド ユーザーがポインターを [To File] メニュー項目に合わせてマウス ボタンをクリックして離すと、関数 tofile_menu_item_Callback
がコピー先のフォルダーとファイル名を選択するようにエンド ユーザーを促すダイアログ ボックスを表示します。
関数 tofile_menu_item_Callback
が、コピー先のファイルとフォルダーを指定するようにエンド ユーザーを促す関数 uiputfile
を呼び出します。エンド ユーザーに既存ファイルの入力を促すメニュー項目を作成する場合、たとえば UI に [Open File] メニュー項目がある場合は、関数 uigetfile
を使用します。
このようなカスケード メニューを作成する場合、ポインターを中間のメニュー項目に合わせるとそのメニュー項目がトリガーされます。最後の終了メニュー項目は、そのメニュー項目上でマウス ボタンを離すとトリガーされます。
オプションが有効であることを示すチェック マークを、メニュー項目の隣に追加できます。GUIDE では、メニュー エディターの [この項目にチェック マークを入れる] を選択して、メニュー項目を既定でチェックされた状態にすることができます。エンド ユーザーがメニュー項目を選択するたびに、コールバック関数はチェックのオンとオフを切り替えることができます。
次のコードは、メニュー項目の隣にあるチェック マークを変更する方法を説明します。
if strcmp(get(hObject,'Checked'),'on') set(hObject,'Checked','off'); else set(hObject,'Checked','on'); end
関数 strcmp
が 2 つの文字ベクトルを比較し、一致する場合は true
を返します。この例では、メニュー項目の Checked
プロパティが文字ベクトル 'on'
と一致する場合に true
を返します。
GUIDE でのメニュー項目の作成についての詳細は、GUIDE アプリのメニューの作成を参照してください。
次のコードは、テーブルのコールバック関数 CellSelectionCallback
の例です。エンド ユーザーがテーブル内のセルを選択したときに関数が実行されるようにするには、この関数をテーブルの CellSelectionCallback
プロパティに関連付けます。
function uitable1_CellSelectionCallback(hObject, eventdata, handles) % hObject handle to uitable1 (see GCBO) % eventdata structure with the following fields % Indices: row and column indices of the cell(s) currently selected % handles structure with handles and user data (see GUIDATA) data = get(hObject,'Data'); indices = eventdata.Indices; r = indices(:,1); c = indices(:,2); linear_index = sub2ind(size(data),r,c); selected_vals = data(linear_index); selection_sum = sum(sum(selected_vals))
エンド ユーザーがテーブル内のセルを選択すると、この関数が次のタスクを実行します。
テーブル内のすべての値を取得し、変数 data
に格納する。
選択したセルのインデックスを取得する。これらのインデックスは、data
内の行と列に対応します。
行と列のインデックスを線形インデックスに変換する。線形インデックスにより、1 つのコマンドで配列内の複数の要素を選択できます。
エンド ユーザーが選択した値を取得し、変数 selected_vals
に格納する。
選択したすべての値を合計し、その結果をコマンド ウィンドウに表示する。
次のコードは、テーブルのコールバック関数 CellEditCallback
の例です。エンド ユーザーがテーブル内のセルを編集したときに関数が実行されるようにするには、この関数をテーブルの CellEditCallback
プロパティに関連付けます。
function uitable1_CellEditCallback(hObject, eventdata, handles) % hObject handle to uitable1 (see GCBO) % eventdata structure with the following fields % Indices: row and column indices of the cell(s) edited % PreviousData: previous data for the cell(s) edited % EditData: string(s) entered by the user % NewData: EditData or its converted form set on the Data property. % Empty if Data was not changed % Error: error string when failed to convert EditData data = get(hObject,'Data'); data_sum = sum(sum(data))
ColumnEditable
プロパティを true
に設定しなければなりません。この節のコードは、エンド ユーザーが座標軸をクリックしたときにトリガーされる Axes の ButtonDownFcn
プロパティの例です。
function axes1_ButtonDownFcn(hObject, eventdata, handles) % hObject handle to axes1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) pt = get(hObject,'CurrentPoint')