私の望みは、ユーザーにデータを選択させ、たくさんのものを与え、次に他の人が書いたGUIを呼び出す(GUI3)、varA、varB、およびvarCを返すことです。ワークスペースmatlabで複数のGUIを呼び出す最も効率的な方法
今私は、データをロードするだけのボタンで、含まれているGUI1を持っている:
function varargout = GUI1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.varA;
varargout{2} = handles.varB;
varargout{3} = handles.varC;
uiresume
close
function pushbutton1_Callback(hObject, eventdata, handles)
[filename, pathname] = uigetfile({'*.7';'*.m';'*.mat';'*.*'}, 'Select a .pfile');
pfilepath=fullfile(pathname,filename);
[handles.tempD,handles.tempE,handles.tempF] = functionF(pfilepath);
guidata(hObject, handles);
[varA,varB,varC]=GUI2(handles);
handles.varA=varA;
handles.varB=varB;
handles.varC=varC;
guidata(hObject,handles) ;
uiresume
GUI2は、ほとんどの作業を行います。
function GUI2_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.tempD = varargin{1}.tempD;
handles.tempD = varargin{1}.tempE;
%%% does things with tempD and tempE and displays things...
guidata(hObject,handles)
uiwait
%%% other functions allow user to interact with data and create tempN
function varargout = GUI1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.varA;
varargout{2} = handles.varB;
varargout{3} = handles.varC;
uiresume
function btnReady_Callback(hObject, ~, handles)
handles = guidata(hObject);
%%% does a bunch of stuff that eventually creates varA
[varB,varC]=GUI3(handles.tempD,handles.tempE,handles.tempN)
guidata(hObject, handles);
uiresume
そしてGUI3は、内部的に原料の束を行い、いくつかのデータを表示します。
今のところ、すべてのGUIはGUI3が閉じられるまで開いたままになります。その時点で、それらはすべて終了し、変数はワークスペースに移動します。理想的には、ワークスペースに変数が計算されるとすぐに変数を取得し、ユーザーがGUI2とGUI3を必要に応じて開いたままにすることができます。また、ボタンが押されるとすぐにGUI1を終了したいが、それでも他のすべてを実行させるようにする。
私の質問 1)GUIを閉じる前にすぐにワークスペースにvarargoutを取得するにはどうすればよいですか? 2)GUIのFigureを閉じますが、他の関数やGUISを呼び出すにはどうすればいいですか? 3)これらの.mファイルを組み合わせるより効率的な方法があるので、データがよりスムーズに渡され、何か混乱する場所が少なくなります。
また、GUI2のbtnReady_Callbackから戻ってエラーが返されます。 HはFigureまたはFigure子孫のハンドルでなければなりません。
私はずっとこのルールを理解しようとしてきましたが、私は完全に混乱しています。
の全ての開放/閉鎖を調整するために非GUI機能は何だと思い
は、洞察力をいただき、ありがとうございます。uiwaitとuiresumeを取り除くと、その機能が機能しなくなります(GUI 2では画像を表示し、ROISを描画させてからボタンを押すと計算が増えます)。 私はプロジェクトを開始したときに私はGUISについて十分に知りませんでした。すでに選択されたファイルで起動するGUI2しか作成できなかったので、GUI1が存在します。他のGUISの開閉を調整する非GUI機能が完璧です。これを行う方法を説明することができる投稿やチュートリアルはありますか? –
OK!私はユーザーの変数を上書きすることは気にしないので、私はassignin(これも助けられました:https://www.mathworks.com/matlabcentral/answers/7517-from-gui-to-workspace)で(1) GUI1_OutputFcnからvargoutsを削除しました。出力変数名を指定せずに呼び出すことができるようになりました.GUI2ではassigninが使用され、delete(get(hObject、 'parent'))); GUI2を呼び出した直後にGUI1に入り、GUI1が終了する。はい! –