matlab界面、編程及常見問題matla_第1頁
matlab界面、編程及常見問題matla_第2頁
matlab界面、編程及常見問題matla_第3頁
matlab界面、編程及常見問題matla_第4頁
matlab界面、編程及常見問題matla_第5頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、_GUI 之框,GUIDE 使用總結(jié)-GUIDE 使用總結(jié)-GUI 界面GUI 界面GUIDE 使用總結(jié) 使用總結(jié)-GUI 界面 界面(zz) 去年做了一些關于GUI 的程序, 現(xiàn)在又要做相關的 東西,回想起來,當時很多經(jīng)驗沒有下來,現(xiàn)在回顧 起來始終覺得不爽,所以從現(xiàn)在開始,一定要勤寫記錄。從簡單的例子說起吧。創(chuàng)建GUI 界面通常有兩種方式: 1,使用 .m文件直接動態(tài)添加控件 2. 使用 GUIDE 快速的生成 GUI 界面 顯然第二種可視化編輯方法算更適合寫大型程序。 一:創(chuàng)建 GUI 1.在 .m 文件中動態(tài)添加 在文件中動態(tài)添加 design, 100 300 100);例如 h_m

2、ain=figure(name,a demo of guibar,none, numbertitle,off,ition,100h_edit=uicontrol(style,edit,backgroundcolor,1 11,ition,20 20 50 20,.tag,myedit,string,1,horizontalalignment,left);h_but1=uicontrol(style,pushbutton, 20,string,INC,.ition,20 50 50callback,v=eval(get(h_edit,string);,.set(h_edit,string,2st

3、r(v+1););h_but2=uicontrol(style,pushbutton, 20,string,DEC,.ition,80 50 50callback,v=eval(get(h_edit,string);,set(h_edit,stri ng,2str(v-1);); 2.使用 GUIDE 幫助創(chuàng)建 GUI 使用 在d 里面輸入 GUIDE 或者從菜單里面, 或者從 快捷按鈕均可 進入 GUIDE 新建并且保存后,會生成相應的 fig 文件和 m 文件,在 Layout 編輯視圖,可以使用如下工具: Layout Editor:布局編輯器; Alignment Tool:對齊工具;

4、 PropertyInspector:對象屬性觀察器; Object Browser:對象瀏覽器;Editor:菜單編輯器。 二:使用控件 新建一個布局(窗口),可以在新窗口中添加如下控件 1靜態(tài)文本(Sic Text) 2編輯框(Edit Text) 控件 3列表框(Listbox)控件 4滾動條(Slider) 控件 5按鈕(Push Button)控件 6開關按鈕(Toggle Button)控件 7 單選按鈕(Radio Button) 控件 8 按鈕組(Button Group)控件 9檢查框(Check Box)控件 10列表框(Listbox) 控件 11 彈出式菜單 (Popu

5、p) 控件 12 坐標軸 (Axes) 控件 13面板(Panel)控件 每一個控件都有自己的屬性常規(guī)屬性有: 一、控件風格和外觀 (1) BackgroundColor:設置控件背景顏色,使用 R G B或顏色定義。 (2)CData:在控件上顯示的真彩色圖像,使用矩 陣表示。 (3)ForegroundColor:文本顏色。 (4)String 屬性:控件上的文本,以及列表框和彈 出菜單的選項。 (5) Visible:控件是否可見。 二、對象的常規(guī)信息 (1)Enable 屬性: 表示此控件的使能狀態(tài),設置 為 on”,表示可選,為“off”時則表示不可選。 (2) Style:控件對象

6、類型。(3)Tag:控件表示(用戶定義)。(4)TooltipString屬性:提示信息顯示。當鼠標指 針位于此控件上時,顯示提示信息。 (5)UserData:用戶指定數(shù)據(jù)。(6)ition:控件對象的尺寸和位置。(7)Units:設置控件的位置及大小的(8)有關字體的屬性,如 FontAngle, FontName等。 三、控件回調(diào)函數(shù)的執(zhí)行 (1)BusyAction:處理回調(diào)函數(shù)的中斷。有兩種選 項: Cancel: 即 取消中斷事件, queue: (默認設置) 排隊 。 (2)屬性: 按鈕按下時的處理函數(shù)。 (3)CallBack 屬性:是連接程序界面整個程序系統(tǒng) 的實質(zhì)性功能的紐

7、帶。該屬性值應該為一個可以直接求值 的字符串,在該對象被選中和改變時,系統(tǒng)將自動地對字 符串進行求值。(4):在對象產(chǎn)生過程中執(zhí)行的回調(diào)函 數(shù)。 (5):刪除對象過程中執(zhí)行的回調(diào)函數(shù)。 (6)erruptible 屬性:指定當前的回調(diào)函數(shù)在執(zhí)行時是否允許中斷,去執(zhí)行其他的函數(shù)。四、控件當前狀態(tài)信息(1)ListboxTop:在列表框中顯示的最頂層的字符 串的索引。 (2)Max:最大值。 (3)Min:最小值。 (4)Value:控件的當前值。 自動生成 相應的函數(shù)體, 函數(shù)名, 名稱一般是 控件 Tag+ Call 類型名 參數(shù)有三個 ( hObject, eventdata, handle

8、s)其中 hObject 為發(fā)生事件的源控件,eventdata 為事件數(shù) 據(jù)結(jié)構(gòu),handles 為傳入的對象句柄式,顏色,初始值等)和是在控件對象創(chuàng)建的時候發(fā)生(一般為初始化 樣實在空間對象被清除的時候發(fā)生分別為鼠標點擊和按鍵 事件 CallbackCallBack 為一般回調(diào)函數(shù),因不同的控件而已異。例如按 鈕被按下時發(fā)生,下拉框改變值時發(fā)生,sliderbar 拖動時 發(fā)生等等。 四:句柄圖形之間的層次關系 可以創(chuàng)建 圖形句柄的常見函數(shù) 1figure 函數(shù):創(chuàng)建一個新的圖形對象。 2newplot 函數(shù):做好開始畫新圖形對象的準備。 3axes 函數(shù):創(chuàng)建坐標軸圖形對象。 4line

9、 函數(shù):畫線。 5patch 函數(shù):填充多邊形。 6surface函數(shù):繪制三維曲面。 7image 函數(shù):顯示對象。 8uicontrol 函數(shù):生成用戶控制圖形對象。 9ui函數(shù):生成圖形窗口的菜單中層次菜單與下一 級子菜單。 你可以使用屬性編輯器來設置屬性 三:寫回調(diào)函數(shù) CallBack每個控件都有幾種回調(diào)函數(shù),右鍵選中的控件一般會有如 下菜單: 然后就可以跳轉(zhuǎn)到相應的 Editor 中編輯代碼,GUIDE 會 幾個實用的小函數(shù): uigetfile選擇文件框 uiputfile 保存文件框 uisetcolor 設置顏色框fontsetcolor 設置字體框 msgbox 消息框 w

10、arndlg 警告框 helpdlg 消息框 不過如果要讓父窗口不可用,你需要使用 uiwait 來定用戶框。例如: h=helpdlg(Please press me!,Attention); uiwait(h); 在一個 m 文件中,可以定義多個函數(shù),但是文件名一定要 與第一個函數(shù)(主函數(shù))一致, 該文件中其他函數(shù)則為本文件的私有函數(shù),外部不可(可以通過參數(shù)調(diào)用的方法,下面會描述)。 例如在一個程序中,創(chuàng)建一個 fig 后,會生成這樣一個 m 文件: function varargout =febirdfun(varargin) gui_Singleton = 1;gui_Se = str

11、uct(gui_Name,mfilename, . , feb, . gui_Singleton, ., , .gui_Singleton, . , fegui_Callback, );if nargin& ischar(varargin1)gui_Se.gui_Callback= str2func(varargin1); end if nargoutvarargout1:nargout=(gui_Se, varargin:); else一下這個主函數(shù):首先(gui_Se,varargin:); endgui_Se 是一個結(jié)構(gòu),指定 了 figure 打開和輸出函數(shù), 設置方法: 設置方法:

12、(1)get 函數(shù)返回某些對象屬性的當前值。例如: pget(obj,set(obj,ition); (2)函數(shù) set 改變句柄圖形對象屬性,例如:ition,vect); 開始 gui_CallBack 為空,如果輸入?yún)?shù)個數(shù)不為0,接下 來將輸入第一個參數(shù)傳遞給函數(shù)處理子函數(shù),還是打開 fig 文件和運行gui_Se.callback。 接下來用交給根據(jù) gui_Se 和傳入?yún)?shù) 來確定是執(zhí)和。 如過gui_Callback 為空,那么就運行打開主窗口 fig 文件,否則,調(diào)用子函數(shù) 四:獲取與設置對象屬性 常用函數(shù): 常用函數(shù): gcf 函數(shù):獲得當前圖形窗口的句柄 gca 函數(shù):獲得

13、當前坐標軸的句柄 gco 函數(shù):獲得當前對象的句柄 gcbo函數(shù):獲得當前正在執(zhí)行調(diào)用的對象的句柄 gcbf 函數(shù):獲取包括正在執(zhí)行調(diào)用的對象的圖形句柄 delete 函數(shù):刪除句柄所對應的圖形對象 findobj 函數(shù):查找具有某種屬性的圖形對象 五:函數(shù)調(diào)用 這個函數(shù)的作用有: 1.當輸入不帶參數(shù)的時候,能夠打開 fig 文件,并且初始化 控件 2.當指定需要調(diào)用的函數(shù)名時, 可以作為其他控件 callback 使用 (實則調(diào)用同文件中的子函數(shù)) 例如, 在某一個控件的 callback 里面這樣寫: (febrdfun 為主函數(shù)) febirdfun(push_button_Callba

14、ck,gcbf,) 這樣的調(diào)用就可以調(diào)用文件里面的子函數(shù)。當然也可以使用其他文件里面的函數(shù)作為 callback,不過那 樣的話,數(shù)據(jù)傳遞會麻煩一些。 在GUI 程序中進行值傳遞我經(jīng)常使用的兩種方法: 1.利用主函數(shù) 的 handles 數(shù)據(jù)結(jié)構(gòu)傳值 例如在某一個圖像窗口句柄中有一個對象 handles(可以 定義自己的數(shù)據(jù)結(jié)構(gòu)) 那么在一個子 Callback 函數(shù)中, 可以通過 handles 傳遞數(shù) 據(jù): function sliderbar1_Callback(hObject,eventdata,handles) 下面看 figure Openning Function %= % eg

15、1 function(hObject, eventdata, handles, varargin) handles.output = hObject; % 通常在這里面定義自己的數(shù)據(jù)結(jié)構(gòu)例如 s=struct(P1,v1. P2,v2); handles.MyStruct=s; % 更新 handles 數(shù)據(jù)結(jié)構(gòu) 非常重要! guidata(hObject, handles); %= functionvarargout =(hObject, eventdata, handles) varargout1 =handles.output; 這個函數(shù)是輸出返回值的定義 注意:中,function對應

16、的 end 可以沒有,但是 隨著版本的更新,end 將會被要求。 2.利用控件的 UserData 來傳值 v1=get(hObject,value); obj=handles.Text1 %直接定位 Tag 為 Text1 的控件 set(obj,value,v1); % eg2 handles.MyStruct.P1=v1; % 更改 handles 中的數(shù)據(jù)guidata(hObjecndles); %更新 handles !重要 end 六:數(shù)據(jù)傳遞 每一個控件一般都有一個屬于自己的自定義域, userData, 你可以定義這樣一個域用來保存自己的數(shù)據(jù),例如在定義 timer 的中,T

17、imer1Et1=timer(,Period,1.0,ExecutionMode,fixedrate);t1.Userfata=handles.MyStruct; 這里的調(diào)用看似沒有傳入任何參數(shù), 實際上此 函數(shù)的定義一定要有至少兩個參數(shù) function(obj,evena) obj.UserData=XX;%可以這樣共享數(shù)據(jù) end 當然Timer 定義的時候允許這樣傳遞一個參數(shù),當然這樣 也可以進行傳值.t1=timer(,handles,r,handles,Period,1.0,ExecutionMode ,fixedrate); GUIDE 生成的 GUI的 M 文件控制了你編制的

18、GUI 界面的所 有屬性和行為,或者說外觀和對用戶操作的響應。比如說 按下一個按鈕或者選擇了一個菜單項之類。M 文件包括了運行你整個界面程序所需要的全部代碼,包括所有 GUI 組 件的 CALLBACKS 函數(shù)。其實這些 callbacks 函數(shù)算是 M 文 件里的子程序,callback 里面就填寫你所期望程序做的動 作,比如畫一個圖或者算一個算式。一 M 文 件 的 數(shù) 據(jù)管 理 模 式Sharing Data with the Handles Structure 用 handles 這個東西共享數(shù)據(jù) 在你運行你的 GUI 的時候,M 文件會自動生成一個叫 做 handles 的東西(準確

19、的說它屬于 handles 類型的結(jié)構(gòu) 體,且取的名字也叫做 handles),不用管那么復雜,只 用知道你可以從它這里找到 GUI 的所有數(shù)據(jù),比如說控件 的信息,菜單信息,axes 信息。想象 handles 就是一個缸 了,它里面裝載了所有的信息,而且這個缸在各個控件的 callback 之間傳來傳去, 理所當然那每個控件的 callback 都可以放入一些想放入的數(shù)據(jù),也可以從里面取出任何想 要的數(shù)據(jù)包括別的控件的信息(比如滑竿的當前值,edit text 的當前值)和別的控件放進去的數(shù)據(jù)。 所以,用 handles 可以達到的目的有兩個:a,各個控件的 callback 的信息交換

20、-(current_data 是隨便設置的變量名) handles.current_data = X; 在某控件下的 callback 寫入這一句,就表示你把這個數(shù)據(jù)放缸里了 guidata(hObjec ndles);接著別忘了保存! 然后在你需要的地方把它從缸里撈出來 X1 = handles.current_data;b,GUI 控件的信息,自然也可以設置 GUI 控件的 信息(比如說背景色隨著按鈕點擊而變換之類,或者你想 讓按鈕 A 點一下,字符 B 跳一下,也行。)-all_choi是隨便取的變量名,my_是你那個 菜單項的 TAG 名字all_choi all_choi= gend

21、les.my_, String); current_choice =, Value); 這樣 current_choice 就得菜單的選擇結(jié)果。 所以,要什么信息,直接gendles.my_到了用戶界面操作中, 目錄或者用 handles.你的對象 就行了。存什么信息也直接 handles.你的對象 就行了。如果是自己的數(shù)據(jù),就.變量名;如果是控件信息,就用 get set 二、M-File 里的各個函數(shù)代表什么意思 在設計面板設計排列好自己需要的各種按鈕或者編輯框之后,下一步任務便是添加自己的響應代碼。 Opening function 添加在它名下的代碼,在 GUI 開 始運行但是還不可見

22、的時候執(zhí)行。這里的代碼一般都是做一些初始化工作的。 Output function 如果有需要,可以向命令行輸出數(shù) 據(jù)。(這個函數(shù)我沒用過,不多說了_) Callbacks 每一次點擊按鈕或者向輸入框輸入數(shù)據(jù) 或者拖動滑竿,這些控件名下的 callback 就會執(zhí)行一次。-函數(shù)的輸入?yún)?shù) M-File 名下的全部 function 都會有這兩個輸入?yún)?shù) hObject 它代表的是當前的這個控件 (也就是你點哪 一個按鈕或者拖的哪一個滑竿) handles 它代表的是現(xiàn)在這整一個 GUI 界面 對這兩個變量進行修改后 guidata(hObject, handles); 無效; 三、Opnnin

23、g Function 進行保存,否則修改 % Get defaultd line output from handles structurevarargout1 = handles.output; 這個函數(shù)不是自己編寫的, 也不是負責調(diào)用。 里面的。但是為你去看這些只用知道要傳出去的數(shù)據(jù), 其實是放在 vararout 這個 變量在別的控件的 callback 是叫不到 vararout 這個變量的,因 callback 的輸入 參數(shù)里并沒有 vararout 這個變量給它用。所接修改 handles.output 這個變量。 (當然在后面別忘了添 加以只能間guidata(hObject,

24、handles);保存修改) 因 為 默 認 的 output 函 數(shù) 里 面 varargout1=handles.output,也就是修改了 vararout。 (所以知道了原理, output 只是一個名字而已,你也可以 用任意別的名字,或者添加的輸出變量,只要在下面添加 varargout2=handles.第二個變量 名 。類似) guidata(hObject, handles)之后不要立即 delete 窗 口命令,因為這時候 varargin uiwai沒有再執(zhí)行一次,也就是 你剛剛修改的 output 并沒有更新到里面去。 所以要么單獨設計一個關閉按鈕;要么跟 ndles.figure1);uiresume 合用。 五、Callbacks 回調(diào)函數(shù) 當你對組件做點擊或者別的動作,則自動調(diào)用相應的 callback。callback 的名字取決于你的控件的 tag 和控件 類型以及響應類型。 function

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論