下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、Matlab的GUI參數(shù)傳遞方式總結(jié)別人的帶自己的一些見解,請指正!matlabgui共有六種參數(shù)傳遞方式和范圍各不相同。1。運用gui本身的varain、varaout傳遞參數(shù)(注:這種方式僅適用與gui間傳遞數(shù)據(jù),且只適合與主子結(jié)構(gòu),及從主gui調(diào)用子gui,然后關(guān)掉子gui,而不適合遞進結(jié)構(gòu),即一步一步實現(xiàn)的方式)輸入?yún)?shù)傳遞:比如子GUI的名稱為subGUI,設想的參數(shù)輸入輸出為:outl,out2=subGUI(in1,in2)在subGUI的m文件中(由GUIDE自動產(chǎn)生):第一行的形式為:functionvarargout=subGUI(varargin)該行不用做任何修改;ar
2、argin和varargout分別是一個可變長度的cell數(shù)組(MATLAB幫助文件中有說明)。輸入?yún)?shù)ini和in2保存在varargin中,輸出參數(shù)out1,out2包含在varargout中;在subGUI的OpeningFcn中,讀入?yún)?shù),并用guidata保存,即:handles.in1=varargin1;handles.in2=varargin2;guidata(hObject,handles);返回參數(shù)的設置:在GUI子程序的OpeningFcn函數(shù)的結(jié)尾加上uiwait(handles.figurel);figurei是subGUI的Tag;subGUI中控制程序結(jié)束(如0K
3、”和Cancel按鈕)的callback末尾加上uiresume(handles.figurei),不要將delete命令放在這些callback中;在子GUI的OutputFcn中設置要傳遞出去的參數(shù),如varargout1=handles.outi;varargout2=handles.out2;末尾添加delete(handles.figure1);結(jié)束程序。在GUI的OpenFcn中,如果不加uiwait,程序會直接運行到下面,執(zhí)行OutputFcn。也就是說程序一運行,返回值就確定了,再在其它部分對handles.output作更改也沒有效果了。加上uiwait后,只有執(zhí)行了uire
4、sume后,才會繼續(xù)執(zhí)行到0utputFcn,在此之前用戶有充分的時間設置返回值。通過以上設置以后,就可以通過out1,out2=subGUI(in1,in2)的形式調(diào)用該子程序。在一個GUI中調(diào)用另一個GUI時,主GUI不需要特別的設置,同調(diào)用普通的函數(shù)一樣。在打開子GUI界面的同時,主程序還可以響應其它的控件。不需要擔心子GUI的返回值被傳錯了地方。運用global定義全局變量傳遞參數(shù)(適用于gui內(nèi)控件間以及不同gui間)這種方式恐怕是最簡單的方式,是很省心!但是但是,簡單的問題就在于有時你會很頭疼!因為在每一個要到該全局變量的地方,你都要添一句gloalx,還有就是如果你在一個地方修改
5、了x的值,那么所有x的值就都變了!有的時候恐怕會出現(xiàn)紊亂。另一個更重要的問題在于,套用C+的一句話,全局變量破壞了程序的封裝性!所以,全局變量是能少用盡量少用。3.運用UserData傳遞參數(shù)(gui內(nèi))直接通過對象的userdata屬性進行各個callback之間的數(shù)據(jù)存取操作。首先必須將數(shù)據(jù)存儲到一個特定的對象中,假設對象的句柄值為ui_handle,需要存儲的值為value,則輸入以下程序即可:set(ui_handle,UserData,Value);此時,value數(shù)據(jù)就存在句柄值為ui_handle的對象內(nèi),在執(zhí)行的過程中若要取回變量可以通過以下方式在任意callback中獲取該數(shù)
6、據(jù)值:value=get(ui_handle,UserData);雖然使用這種方法簡單,但是每個對象僅能存取一個變量值,因此當同一對象存儲兩次變量時,先前的變量值就會被覆蓋掉,因此都用UserData存儲簡單與單一的數(shù)據(jù)。如下面有兩個gui函數(shù),myloadfn加載mydata.mat文件,該文件內(nèi)存儲XYData變量,其值為m*2的繪圖矩陣,加載后將該變量值存儲到當前的窗口的UserData屬性中。另一個myplotfcn函數(shù)則是用以獲取該UserData屬性中存取的繪圖數(shù)據(jù),然后繪圖。代碼如下:functionmyloadfcnloadmydata;set(gcbf,UserData,XY
7、data)functionmyplotfcnXYdata=get(gcbf,UserData);x=XYData(:,1);y=XYData(:,2);plot(x,y);4應用setappdatagetappdata與rmappdata函數(shù)(gui間和gui內(nèi),推薦使用)使用上面三個函數(shù)最有彈性處理數(shù)據(jù)的傳送問題,與UserData的方式相類似,但是克服UserData的缺點,使一個對象能存取多個變量值。getappdata函數(shù)VALUE=getappdata(H,NAME)setappdata函數(shù)setappdata(H,NAME,VALUE)rmappdatarmappdata(H,NA
8、ME)首先在matlab命令窗口輸入magic(3)數(shù)據(jù),因此當前的工作空間就存儲了magic(3)這組數(shù)據(jù)了,然后建立一個按鈕來獲取并顯示magic(3)數(shù)據(jù)A=magic(3);setappdata(gcf,A,A);%saveuicontrol(String,顯示矩陣A,callback,A=getappdata(gcf,A);當在主子gui內(nèi)調(diào)用時,可以如下設置fig1調(diào)用fig2時,使用fig2指令來打開fig2,在fig2的m文件中,在回調(diào)函數(shù)中用setappdata(fig1,A,A)實現(xiàn)返回fig1,并將參數(shù)A傳遞給fig1然后在fig1的使用A的地方添加A=getappdat
9、a(fig1,A)。但這種方式的一個問題就是沒調(diào)用一次,fig1的數(shù)據(jù)就得初始化一次,這是因為setappdata(fig1,A,A)中出現(xiàn)了fig1,調(diào)用一次setappdata就得運行一次fig1的緣故,解決方案就是把setappdata(fig1,A,A)改為setappdata(O,A,A),這樣把A讀入matlabworkspace,相當于一個全局變量了,但當然比直接用global定義全局變量好!5結(jié)合handles和guidata函數(shù)(gui內(nèi),不推薦使用,經(jīng)常出現(xiàn)問題,比如在handles中添加了變量對象Y后可能就會擠掉handles另外一個對象)他的使用格式如下,如果你在pus
10、hbutton中得到一個變量X,相傳出去,那么在pushbutton的callback中,在得到X后添加如下代碼:handles.X=X;guidata(hObject,handles)(注意,一定是兩行連寫)在pushbutton2中要用到X是,在其callback先添加X=handles.X;即可得到X的值。6.運用save和load(importdata)傳遞參數(shù)(gui內(nèi)和gui間)將某變量x的值先存到磁盤,用的時候在調(diào)用。格式如下:save(*.mat,x);用的時候就用load(*.mat),但這樣只是把x讀到了matlabworkspace,不會用顯示,你還要再去查看這個變量名,
11、然后才能用,建議使用p=importdata(*.mat),p是一個結(jié)構(gòu)體,可以隨意使用了。當然,這種方式涉及到磁盤讀寫,速度當然會有影響的,一般情況不用,通常用在保存以及導入某個變量時!m文件中每個callback都可以視為一個獨立執(zhí)行的接口,也就說每個callback之間無法做溝通操作,因此變量傳遞會有問題,有以下幾種方式可以解決不同的回調(diào)函數(shù)之間的數(shù)據(jù)傳遞問題:.使用全局變量當前有一組運算數(shù)據(jù)放在a必須在tag名稱為pushbutton與pushbutton2所對應的對象callback中使用,因此必須在雙方的callback中都設置這個數(shù)據(jù)a為全局變量。functinpushbutto
12、n_(hobject,eventdata,handles)%hobjecet按鈕一的句柄%handles用作存儲用戶數(shù)據(jù)的句柄(下一小節(jié)會用到)globala%將a聲明為全局變量functinpushbutton_2(hobject,eventdata,handles)globala%將a聲明為全局變量通過以上的聲明,a就成為跨越兩個按鈕的數(shù)據(jù)2.應用對象的userdata直接通過對象的userdata屬性進行各個callback之間的數(shù)據(jù)存取操作。首先必須將數(shù)據(jù)存儲到一個特定的對象中,假設對象的句柄值為ui_handle,需要存儲的值為value,則輸入以下程序即可:set(ui_handl
13、e,UserData,Value);此時,value數(shù)據(jù)就存在句柄值為ui_handle的對象內(nèi),在執(zhí)行的過程中若要取回變量可以通過以下方式在任意callback中獲取該數(shù)據(jù)值:value=get(ui_handle,UserData);雖然使用這種方法簡單,但是每個對象僅能存取一個變量值,因此當同一對象存儲兩次變量時,先前的變量值就會被覆蓋掉,因此都用UserData存儲簡單與單一的數(shù)據(jù)。如下面有兩個gui函數(shù),myloadfn加載mydata.mat文件,該文件內(nèi)存儲XYData變量,其值為m*2的繪圖矩陣,加載后將該變量值存儲到當前的窗口的UserData屬性中。另一個myplotfcn
14、函數(shù)則是用以獲取該UserData屬性中存取的繪圖數(shù)據(jù),然后繪圖。代碼如下:functionmyloadfcnloadmydata;set(gcbf,UserData,XYdata)functionmyplotfcnXYdata=get(gcbf,UserData);x=XYData(:,1);y=XYData(:,2);plot(x,y);3.應用setappdatagetappdata與rmappdata函數(shù)使用上面三個函數(shù)最有彈性處理數(shù)據(jù)的傳送問題,與UserData的方式相類似,但是克服UserData的缺點,使一個對象能存取多個變量值。getappdata函數(shù)VALUE=getappdata(H,NAME)setappdata函數(shù)setappdata(H,NAME,VALUE)rmappdatarmappdata(H,NAME)首先在matlab命令窗口輸入magic數(shù)據(jù),因此當前的工作空間就存儲了magic(3)這組數(shù)據(jù)了,然后建立一個按鈕來獲取并顯示magic(3)數(shù)據(jù)A=magic(3);setappdata(gcf,A,A);%saveuicontrol(String,顯示矩陣A,callback,A=getappdata(gcf,”A”);4結(jié)合handles
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)老院老人入住手續(xù)制度
- 養(yǎng)老院老人安全保障制度
- 向命運挑戰(zhàn)課件
- 城市經(jīng)濟學城市化教學課件
- 救生員入職合同(2篇)
- 2024年度生物安全試劑采購與儲備合同3篇
- 2024年農(nóng)業(yè)設施維修及保養(yǎng)承包合同樣本3篇
- 2025年大興安嶺貨運從業(yè)資格證模擬考試題目
- 2025年塔城貨物運輸駕駛員從業(yè)資格考試系統(tǒng)
- 2025年阜陽貨運從業(yè)資格證試題庫及答案
- 全文逐條解讀公職人員政務處分法
- 林木分子標記輔助育種
- 學校護理實訓室建設方案
- 《品保QC培訓資料》課件
- 《藥物制劑工程》課程教學大綱全套
- 《觀光園藝》課件
- 2023年創(chuàng)建智慧校園工作總結(jié)
- 國開電大《人文英語3》一平臺機考真題(第十三套)
- 承德圍場2023-2024學年七年級上學期期末數(shù)學精選卷(含答案)
- 數(shù)字化農(nóng)業(yè)的應用
- 《財務管理》全套課件
評論
0/150
提交評論