私はmatlabが初めてです。Matlab GUI を使用しているときに、次のような問題に直面しました。
.i 2 つの Figure ファイルが必要で、一方の Figure ファイルが他方を呼び出します。最初の fig ファイルから 2 番目の fig ファイルの名前を呼び出すだけで、2 番目の fig ファイルを呼び出すことができます。ただし、ある fig ファイルから別の fig ファイルにいくつかのパラメーターを送信したい場合もあります。ここでは、引数を送信し、さらに処理を行うためにこれらのパラメーターを取得する必要があります。この問題の解決策を見つけることができませんでした。誰かがこの問題で私を助けてくれたらうれしいです。
よろしくお願いします
4 に答える
これを行うために私が見つけた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 に関する私の実際の知識はそれほど多くはありませんが、 thisやthis、さらには公式ドキュメントからthis などの優れたリソースを見つけることができると役に立ちます。ここに書いた内容は間違っている可能性があるため、詳細については、必ずドキュメントを参照してください。)
私はこれをしたいと思います(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)
バラギンは細胞構造です。cell2matとcharを使用して元に変換します。
theNumber = cell2mat(varargin(1));
theText = char(varargin(2));
theTextAgain = cell2mat(varargin(2));
theMatrix = cell2mat(varargin(3));
最も簡単な方法は、セル配列でパラメーターをラップし、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})
。それについても説明が必要な場合は、コメントを残してください。回答を延長します。