1

'KeyPressFcn'として指定した関数が値を返す方法を見つけようとしています。

現在私は持っています:

figure('KeyPressFcn', @myFunc);

これは問題ありませんが、myFuncが返す値にアクセスする必要があります

これを行う方法はありますか?

私はhttp://www.mathworks.com/help/matlab/ref/figure_props.html#KeyPressFcnにアクセスしましたが、それらが示す例を見ると、まだ何が起こっているのかわかりません。

彼らが使用する例は次のとおりです。

figure('KeyPressFcn', @(obj,evt)disp(evt));

そして、関数にイベント構造体が渡されたと言っています。では、なぜそれは単純ではないのですか?

figure('KeyPressFcn', @disp(evt));

関数名の前にある(obj、evt)用語の意味は何ですか?

evtとは何ですか?objとは何ですか?の意義は何ですか

4

1 に答える 1

2

MATLABのコールバック関数で値を返すことはできません。代わりに、のような関数を使用できますsetappdata。設定したデータは、getappdata必要なときに取得できます。

次のように使用できます。

function myFunc(obj, evt)
    a = 42;
    setappdata(0, 'varName', a);
end

コールバックの外:

otherVarName = getappdata(0, 'varName');

otherVarName値は42になります。


objコールバックが実行されているオブジェクトです。evteventdataです。GUIDEのドキュメントには次のように書かれています。

hObject —コールバックがトリガーされたオブジェクト(GUIコンポーネントなど)のハンドル。ボタングループSelectionChangeFcnコールバックの場合、hObjectは選択されたラジオボタンまたはトグルボタンのハンドルです。

eventdata — MATLAB構造体(またはeventdataを生成しないコンポーネントの場合は空行列)の形式でコンポーネントによって発行されるテーブル選択などのユーザーアクションによってトリガーされるイベントのシーケンス

ここで、hObjectisobjeventdataisevtです。

編集ボックスがあり、ユーザーが書いたテキストを取得したいとします。そのためには、エディットボックスのハンドルが必要です。それhObjectがあなたに与えるものです。

function buttonCallback(hObject, eventdata)
    str = get(hObject, 'String');
end
于 2013-03-14T18:51:50.987 に答える