Matlab GUI 界面間數據的傳遞

方法1:

假設你有兩個GUI叫一個叫gui_1,另一個叫gui_2,在gui_2中調用gui_1的參數或者結果。

首先在gui_1中進行參數輸入操作:
(1)返回值只有一個的情況
在gui_1中的:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function gui_1_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = 數據或者變量名;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在gui_1中的
function varargout = gui_1_OutputFcn(hObject, eventdata, handles)
 varargout{1} = handles.output;
其實程序本來的.m文件就是這樣的,不用更改,如果數據或者變量是在同一個GUI中別的控件或執行中輸入的,將數據或者變量名定義爲全局變量就可,即:
global  數據或者變量名;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function gui_1_OpeningFcn(hObject, eventdata, handles, varargin)
global  數據或者變量名;
handles.output = 數據或者變量名
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

(2)返回值有多個以上的情況
基本以上面相同,
function gui_1_OpeningFcn(hObject, eventdata, handles, varargin)
下面任意一個地方輸入
handles.output = 數據1或者變量名1;
handles.secend_output = 數據2或者變量名2;
handles.thrid_output = 數據3或者變量名3;
...........................
同時在
在gui_1中OutputFcn輸入以下語句
function varargout = gui_1_OutputFcn(hObject, eventdata, handles)
 varargout{1} = handles.output;
varargout{2} = handles.secend_output;
varargout{3} = handles.thrid_output;
........................
依次類推,在同一個gui中的參數傳遞採用上述的設置爲全局變量調用即可。

在gui_2中的buttonCallback下輸入
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function pushbutton1_Callback(hObject, eventdata, handles)
     a=gui_1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
則gui_1的結果就傳遞到a中。
同時對返回值爲多參數的情況gui_2中則要輸入語句改爲
在gui_2中的buttonCallback下輸入
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function pushbutton1_Callback(hObject, eventdata, handles)
     [data1,data2,data3,....]=gui_1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
則gui_1的結果就傳遞到[data1,data2,data3,....]=中,分別對這些返回值進行操作即可。

方法2:

使用setappdata和getappdata兩個函數。
----------------------------
SETAPPDATA(H, NAME, VALUE) sets application-defined data for
   the object with handle H.  The application-defined data,
   which is created if it does not already exist, is
   assigned a NAME and a VALUE.  VALUE may be anything.

   See also getappdata, rmappdata, isappdata.
----------------------------
H設置爲0,表示matlab的全局句柄,而不是某個窗口或者控件的句柄。
value爲,你需要傳遞的數據變量,我們喜歡用結構變量。
name爲當前figB的窗體標識,也就是窗體的tag。
例如在figB裏面
spec_data.length = 20;
spec_data.weight = 200;
setappdata(0,'figB',spec_data); %保存
以上代碼放在figB裏面需要保存設置參數的callback裏面
然後在figB的
output 那個callback
function varargout = figB_OutputFcn(hObject, eventdata, handles)
% Get default command line output from handles structure
%**********************return global varible
%varargout{1} = handles.output;
uiwait(gcf);
h=getappdata(0,'figB');
varargout{1}=h;
通過output裏面的缺省變量varargout輸出來。

在figA裏面
就那樣用
ret=figB;

發佈了28 篇原創文章 · 獲贊 7 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章