5


私はmatlabが初めてです。Matlab GUI を使用しているときに、次のような問題に直面しました。
.i 2 つの Figure ファイルが必要で、一方の Figure ファイルが他方を呼び出します。最初の fig ファイルから 2 番目の fig ファイルの名前を呼び出すだけで、2 番目の fig ファイルを呼び出すことができます。ただし、ある fig ファイルから別の fig ファイルにいくつかのパラメーターを送信したい場合もあります。ここでは、引数を送信し、さらに処理を行うためにこれらのパラメーターを取得する必要があります。この問題の解決策を見つけることができませんでした。誰かがこの問題で私を助けてくれたらうれしいです。
よろしくお願いします

4

4 に答える 4

7

これを行うために私が見つけた3つの方法があります:

方法 1: 次のように使用setappdataします。getappdata

setappdata(0,'some_var',value)
some_other_var = getappdata(0,'some_var')

fig1 の m ファイルで setappdata() を使用して、渡したいデータを格納し、別の m ファイルで getappdata() を呼び出して取得します。2 つの関数の引数0は MATLAB ルート ワークスペースを指定します。このワークスペースは、プログラムからどこからでもアクセスできます (つまり、グローバルです)。そのため、Figure を閉じても、そのデータは引き続き使用できます。rmappdataそれらを削除するために使用することができます。

方法 2:使用guidata:

GUIDE を使用して GUI を作成したと仮定すると、呼び出された構造体にアクセスできます。この構造体handlesはどこにでも渡され、編集できます。したがって、GUI コールバックでこれを行うことができます。

handles.some_var = some_value
guidata(hObject,handles)

次に、他の m-filehandles.some_varの他のコールバック (handlesが自動的に渡されるため) の他の場所にアクセスできます。

some_other_var = get(handles.some_var)

方法 3:使用UserData:

最初の Figure から必要な変数を保存します。

set(name_of_fig, 'UserData', some_var)

次に、他のものから取得します。

some_other_var = get(name_of_fig, 'UserData')  

(免責事項: MATLAB に関する私の実際の知識はそれほど多くはありませんが、 thisthis、さらには公式ドキュメントからthis などの優れたリソースを見つけることができると役に立ちます。ここに書いた内容は間違っている可能性があるため、詳細については、必ずドキュメントを参照してください。)

于 2011-03-18T01:41:26.487 に答える
2

私はこれをしたいと思います(GUIビルダーGUIDEを使用していると仮定します)。

figure/m ファイルの名前がfirstFigure.fig/mおよびsecondFigure.fig/m であるとします。firstFigureのコードでは、secondFigureを呼び出して、パラメーターを引数として渡します。

someNumber = 1;
someText = 'test';
aMatrix = rand(3);

secondFigure(someNumber, someText, aMatrix);

引数は、コールバック関数の変数vararginとしてsecondFigureで使用できます。

function varargout = secondFigure(varargin) 

function secondFigure_OpeningFcn(hObject, eventdata, handles, varargin)

バラギンは細胞構造です。cell2matcharを使用して元に変換します。

theNumber = cell2mat(varargin(1));
theText = char(varargin(2));
theTextAgain = cell2mat(varargin(2));
theMatrix = cell2mat(varargin(3));
于 2012-05-08T11:28:51.100 に答える
0

これが役立つかもしれません: http://www.mathworks.ch/matlabcentral/newsreader/view_thread/171989

于 2012-01-27T03:02:28.310 に答える
0

最も簡単な方法は、セル配列でパラメーターをラップし、GUI コンストラクターに直接送信することです。2 つのパラメーターを使用した呼び出しは、次のようになります。

figure2({param1, param2})

次に、次のようなコードを使用して、開始関数 (figure2_OpeningFcn) で引数をアンパックできます。

handles.par1 = varargin{1}{1};
handles.par2 = varargin{1}{2};

これらの行は、 という行の前のどこかに配置する必要がありますguidata(hObject, handles);handles.par1その後、他のすべてのコールバックにhandles.par2直接アクセスできます。

GUIDE を使用して GUI を生成していると思います。figure2.fig と同じディレクトリにある figure2.m に figure2_OpeningFcn があります。

注: Figure から値を返すこともできますreturnvalue = my_figure({my_input})。それについても説明が必要な場合は、コメントを残してください。回答を延長します。

于 2012-05-07T22:44:11.650 に答える