?? matlab gui中的變量傳遞.txt
字號:
matlab gui中的變量傳遞(zz)
2007-06-24 20:45
m文件中每個callback都可以視為一個獨立執(zhí)行的接口,也就說每個callback之間無法做溝通操作,因此變量傳遞會有問題,有以下幾種方式可以解決不同的回調(diào)函數(shù)之間的數(shù)據(jù)傳遞問題:
1.使用全局變量
當(dāng)前有一組運算數(shù)據(jù)放在a必須在tag名稱為pushbutton1與pushbutton2所對應(yīng)的對象callback中使用,因此必須在雙方的callback中都設(shè)置這個數(shù)據(jù)a為全局變量。
functin pushbutton_1(hobject,eventdata,handles)
%hobjecet 按鈕一的句柄
%handles 用作存儲用戶數(shù)據(jù)的句柄(下一小節(jié)會用到)
global a %將a聲明為全局變量
直接通過對象的userdata屬性進行各個callback之間的數(shù)據(jù)存取操作。首先必須將數(shù)據(jù)存儲到一個特定的對象中,假設(shè)對象的句柄值為ui_handle,需要存儲的值為value,則輸入以下程序即可:
set('ui_handle','UserData',Value);
此時,value數(shù)據(jù)就存在句柄值為ui_handle的對象內(nèi),在執(zhí)行的過程中若要取回變量可以通過以下方式在任意callback中獲取該數(shù)據(jù)值 :
value=get(''ui_handle,'UserData');
雖然使用這種方法簡單 ,但是每個對象僅能存取一個變量值,因此當(dāng)同一對象存儲兩次變量時 ,先前的變量值就會被覆蓋掉,因此都用UserData存儲簡單與單一的數(shù)據(jù)。如下面有兩個gui函數(shù),myloadfn加載mydata.mat文件,該文件內(nèi)存儲XYData變量,其值為m*2的繪圖矩陣,加載后將該變量值存儲到 當(dāng)前的窗口的UserData屬性中。另一個myplotfcn函數(shù)則是用以獲取該UserData屬性中存取的繪圖數(shù)據(jù),然后繪圖。代碼如下:
function myloadfcn
load mydata;
set(gcbf,'UserData',XYdata)
function myplotfcn
XYdata=get(gcbf,'UserData');
x=XYData(:,1);
y=XYData(:,2);
plot(x,y);
3.應(yīng)用setappdata\getappdata與rmappdata函數(shù)
使用上面三個函數(shù)最有彈性處理數(shù)據(jù)的傳送問題,與UserData的方式相類似,但是克服UserData的缺點,使一個對象能存取多個變量值。
(1)getappdata函數(shù)
VALUE=getappdata(H,NAME)
(2)setappdata函數(shù)
setappdata(H,NAME,VALUE)
(3)rmappdata
rmappdata(H,NAME)
首先在matlab命令窗口輸入magic(3)數(shù)據(jù),因此當(dāng)前的工作空間就存儲了magic(3)這組數(shù)據(jù)了,然后建立一個按鈕來獲取并顯示magic(3)數(shù)據(jù)
>>A=magic(3);
>>setappdata(gcf,'A','A');%save
>>uicontrol(‘String’,'顯示矩陣A','callback','A=getappdata(gcf,'A')');
4 結(jié)合handles和guidata函數(shù)(不推薦使用,經(jīng)常出現(xiàn)問題,比如在handles中添加了變量對象Y后可能就會擠掉handles另外一個對象)
其方式如下:
handles.變量名稱=變量值 %取得數(shù)據(jù)
guidata(h,dhandles) %存儲數(shù)據(jù)
如果有一個callback中運算了兩個值Y和F,而這兩個值是在另一個callback中使用的,就可以使用以下程序了:
handles.Y=Y;
handles.F=F;
guidata(hObject,handles);
在另一個要使用到這兩個變量的callbvack中,可以使用以下程序獲得:
Y=handles.Y;
F=handles.F;
functin pushbutton_2(hobject,eventdata,handles)
global a %將a聲明為全局變量
通過以上的聲明,a就成為跨越兩個按鈕的數(shù)據(jù)
2.應(yīng)用對象的userdata
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -