matlab gui プログラミングの基本的な考え方は次のとおりです。
- 図を設定する
- メッセージループに入る
どちらの手順も、matlab GUI エディター (ガイド) を使用して処理されます。重要なことは、プログラム フローの制御をメッセージ ループに渡すことです。物事を成し遂げるために、何かが起こるたびに関数を呼び出すようにメッセージ ループに指示できます。
GUI エディタでプッシュボタンを右クリックし、[コールバックの表示 -> コールバック] を選択します。これにより、ボタンを押したときに何が起こるかを指定できる.mファイルにそのような関数が自動的に作成されます。
理解を深めるために、プッシュボタンの Callback プロパティを見てください。Guide はadd('push_calc_Callback',hObject,eventdata,guidata(hObject))
、新しいコールバック関数のラッパーとして main 関数 (add) を呼び出すようなものを入力します。これは、プロパティ エディターで自分で行うことも、スタートアップ コードでプログラムによって行うこともできます。
私はあなたが次のことを望んでいると思います:
- edit1 と edit2 の文字列値を取得します
- 文字列を数値に変換する
- 計算を実行する
- text3 の文字列値を結果の文字列表現に設定します
3 番目の関数引数として使用できるハンドルと、get および set 関数を使用して、gui 要素のプロパティにアクセスできます。ハンドル構造はガイドによって作成され、要素には指定したタグと同じ名前が付けられます。
matlab コードでは、これは次のようになります。
% --- Executes on button press in push_calc.
function push_calc_Callback(hObject, eventdata, handles)
% hObject handle to push_calc (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x_string = get( handles.edit1, 'String');
y_string = get( handles.edit2, 'String');
x_numeric = str2num( x_string );
y_numeric = str2num( y_string );
result_numeric = x_numeric * y_numeric;
result_string = num2str( result_numeric );
set( handles.result, 'String', result_string);
編集:問題は、handles.edit1 などです。ボタンやテキスト ボックスのようなウィジェットで何かをしたいときはいつでも、あなたが意味するウィジェットを正確に matlab に伝えることができなければなりません。Guide は舞台裏でいくつかのことを行います。そのうちの 1 つはuicontrolを呼び出すことです。これはウィジェットを作成し、ランダムではあるが一意の番号を返します。これは、操作に使用できるリソースへのハンドルであるという点で、銀行口座番号に少し似ています。ガイドで新しいプッシュボタンを作成し、プロパティ エディターでタグ「clickme」を割り当てると、ガイドはプッシュボタンを作成し、構造体 handles.clickme
にハンドルを保存します。どのタグを割り当てたか覚えていれば、作成したウィジェットのハンドルを簡単に取得できます。
関数の最初の行を見てみましょう。
x_string = get( handles.edit1, 'String');
これは、 matlab が edit1 ウィジェットとプロパティ エディターからのプロパティ名 (この場合は「文字列」) に関連付けるのと同じ番号である限り、気にする必要のない番号で関数getを呼び出します。これは、プロパティ エディタに「edit1」のタグが表示されるまですべてのウィンドウ要素をクリックするのと同じであり、そのオブジェクトに対して「String」という名前のプロパティの値を見つけます。
新しいテキストを入力したり、スライダーを動かしたり、ウィンドウ サイズを変更したりするたびに、プロパティが自動的に更新されます。それは逆にも機能します。で 'Position' プロパティを変更するとset( handles.edit1, 'Position', [20 20 100 30])
、ウィジェットは自動的に移動され、指定された位置にサイズ変更されます。