為什么在MATLAB中要使用GUI呢?其實GUI就是Matlab中的Visual Basic,是面向?qū)ο蟮木幊?,可以使Matlab程序的終端用戶,即使不懂的Matlab也可以輕易操作該程序!
如果沒有圖形用戶界面(GUI)我們只能從命令行(Command Window)中調(diào)用相關(guān)程序,這相對比較繁瑣,并且不是所有用戶都是這個能力。就好比計算機的DOS系統(tǒng),在有windows的情況下,您會選擇DOS嗎?當然我們也不排除骨灰級的人物! 在本節(jié)教程我們主要針對沒有GUI創(chuàng)建和使用經(jīng)歷的網(wǎng)友,但是必要的MATLAB基礎(chǔ)知識是需要的。在教程中我們將創(chuàng)建一個簡單的GUI程序,它執(zhí)行兩個數(shù)的加法運行,然后顯示其運算結(jié)果。 什么Matlab還沒有安裝?天呀,那請您先看下論壇的【MATLAB下載安裝】版塊(最新版本2009b,4.75GB),里面有您在Matlab下載安裝過程中需要的一些資料! 好下面開始我們的教程! 一、打開和創(chuàng)建GUI界面 1、首先打開Matlab,在Command Window中輸入guide回車 當然也可以通過工具欄的GUIDE按鈕直接打開 2、此時打開GUI編輯器GUIDE(GUI Developer的縮寫) 2.1 界面上有兩個標簽也“Creat New GUI”和“Open Existing GUI” 如果創(chuàng)建新的GUI此時我們選擇第一個標簽頁,但如果打開其它已經(jīng)存在的GUI就點擊第二個標簽吧 2.2 這里我們選擇第一個標簽下的“Blank GUI”(空白GUI),下面還有幾個系統(tǒng)GUI模版,你可以根據(jù)需要其它的 2.3 點擊“OK”我們正式進入GUIDE界面,呵呵,是不是感覺似曾相識 3、添加你需要的控件到figure中 在添加控件之前,您最好對您的GUI界面布局已經(jīng)有一定的構(gòu)思了,否則盲目性太大了不利于您的編程。下面是我們構(gòu)思的布局 二、添加控件和設(shè)置屬性
在正式講解之前,我們先講解下GUI中的鼠標基本操作 (a) 在左邊的控件面板中鼠標左擊選擇您需要的控件,然后放開鼠標 (b) 在右邊的figure中按住左鍵,畫出您的控件,于是空間就在figure上 (c) 你可以用鼠標拖拽figure上所有控件,來改變他們的位置 (d) 在控件上雙擊鼠標左鍵(右擊是快捷菜單)可打開控件屬性面板 1、從上面的布局構(gòu)思,我們知道本GUI需要以下控件 按照上面介紹的鼠標操作方法,將這6個控件拖到右邊的figure中,如下圖所示 2、接下來就是編輯這些控件的屬性 好,下面從Static Text開始吧,雙擊其中一個“靜態(tài)文本塊”,將跳出該控件的“屬性查看器”(Property Inspector) GUI控件的幾個常用屬性說明如下: position:指示空間在figure中的位置 font**:字體相關(guān)屬性 string:相當如VB中的caption,就是顯示在控件上的文字 tag:控件的唯一標識符,相當于ID,我們需要tag來指定某一個空間 2.1 在這里我們修改它的“string”屬性為“+” 2.2 同理修改它的“fontsize”屬性為20 在編輯完這些屬性后,直接點擊右上角的“關(guān)閉”按鈕,關(guān)閉屬性查看器,此時屬性會自動保存。回到GUIDE,如果控件上的文字被部分隱蓋,此時可以通過鼠標拖拽改變控件的大小 2.3 重復(fù)上面的操作 (1)將第二個“Static Text”的“string”改為“=”,“fontsize”為20 (2)第三個“Static Text”的“string”改為“My Adder GUI”,“fontsize”為20 (3)第四個“Static Text”的“string”改為“0”,“tag”為“answer_staticText” 于是,我們將得到如下所示的GUI界面 2.4 下面雙擊Edit Text,修改編輯文本框的屬性 (1)第一個“Edit Text”的用來存儲第一個加數(shù),我們將“string”改為“0”,“tag”改為“input1_editText” (2)第二個“Edit Text”的用來存儲第二個加數(shù),我們將“string”改為“0”,“tag”改為“input2_editText” 2.5 修改Pushbutton按鈕的屬性,“string”改為“Add!”,“tag”改為“add_pushbutton” 再次預(yù)覽下我們現(xiàn)在得到的GUI界面 3、重新布局和移動控件位置,使其美觀 將上面編輯完的GUI程序保存為myAdder,此時在當前目錄下,Matlab將自動生成如下來個兩個文件myAdder.m和myAdder.fig。 .fig文件包含了程序的圖形用戶界面,.m文中包含了GUI所需的回調(diào)函數(shù)和其他必須代碼。 三、書寫GUI回調(diào)函數(shù)(callback)代碼
在保存GUI程序時,Matlab會自動生成.fig和.m文件,其中的.m就是我們現(xiàn)在要操作的對象。 我們就是M文件中添加控件的回調(diào)函數(shù)相應(yīng)用戶的操作!這也是GUI編程的核心內(nèi)容,它要求你必須掌握Matlab基本編程以及圖形句柄語句! 打開.m文件,發(fā)現(xiàn)里面有很多function的代碼,看得我們眼花繚亂,呵呵,不要膽怯!本教程是初級教程, 我們只涉及里面的callback,其他的我們可以暫時置之不理!至于其它的我們以后的教程中對做相關(guān)介紹! 在正式講解之前,一個小使用技巧,Matlab Editor(代碼編輯器)工具欄顯示函數(shù)按鈕 1、在Editor中工具欄的函數(shù)Show Function中選擇input1_editText_Callback 或者右擊tag為input1_editText的編輯文本框,View Callback→Callback 2、此時光標會跳轉(zhuǎn)到.m文件的function input1_editText_Callback處,方便我們直接編輯 function input1_editText_Callback(hObject, eventdata, handles)
% hObject handle to input1_editText (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'String') returns contents of input1_editText as text
% str2double(get(hObject,'String')) returns contents of % input1_editText as a double 在上面代碼下添加如下MATLAB代碼
% handles 包含figure中所有圖形對象句柄的結(jié)構(gòu)體,如果我們想引用tag為mytag的控件,使用handles.mytag
% set/get 函數(shù)是用來設(shè)置/獲取某個控件屬性 % 使用get命令獲取第一個加數(shù),并將它轉(zhuǎn)換成數(shù)值 input = str2num(get(hObject,'String')); % string屬性是字符串,所以必須轉(zhuǎn)換成數(shù)值 % 檢驗輸入是否為空,是則將它置為0
if (isempty(input)) set(hObject,'String','0') end % 保存handles結(jié)構(gòu)體,只要在handles結(jié)構(gòu)體有改變時,才需要保存
guidata(hObject, handles); % 這里由于handles沒有改變,故這里其實沒有必要,但是為了避免潛在的不必要麻煩,建議在所有Callback最后都添加該命令 3、為input2_editText_Callback添加完全相同的代碼
4、編輯add_pushbutton_Callback回調(diào)函數(shù),使用上面提到的方法,將光標定位到 % --- Executes on button press in add_pushbutton.
function add_pushbutton_Callback(hObject, eventdata, handles) % hObject handle to add_pushbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) 在后面我們添加上如下代碼
a = get(handles.input1_editText,'String'); 恭喜您,到此為此這個GUI程序就完成了!接下來就可以運行和演示它了!
有一個小技巧要告訴大家的,如果您在第一次保存GUI程序時,不想讓Matlab為每一個callback回調(diào)函數(shù)自動生成注釋文本,可以如下操作:File→Preferences... 如果不想讓Matlab自動生成fig文件,而只是生成M文件,可以如下操作:Tools→GUI Option 四、GUI程序打開、運行和發(fā)布
1、想在GUIDE中打開一個寫好的GUI程序,可有兩種方法 1.1 如上面所說的,在打開GUIDE界面時,我們可以選擇“Open Existing GUI”,然后選中你需要打開的GUI程序 1.2 直接在Current Directory選中*.fig文件,然后右擊選擇“Open In GUIDE” 2、運行編輯好的GUI程序方法主要有三種方法 2.1 點擊GUIDE工具欄的run按鈕 2.2 從Command Window命令行運行,首先將MATLAB當前目錄切換到*.fig和*.m文件所在目錄(兩個必須同在當前目錄或者都在搜索路徑下) 接著在Command Window中輸入GUI的文件名(不需要擴展名)myAdder,然后回車 2.3 直接在Current Directory中選中myAdder.m,右擊選擇“Run File”即可 通過上面三種方法中任意一種,GUI程序?qū)㈤_始運行,并顯示如下 3、執(zhí)行GUI程序功能 在兩個文本框中輸入分別輸入兩個加數(shù),然后點擊Add!按鈕,此時和將顯示在“=”右邊的文本框中! 五、程序常見問題(bug)解答
如果你的GUI程序沒有正確運行,或者頻頻報錯,而苦于沒法找到錯誤在哪里,這里有幾條小技巧希望能幫助您找到bug。 1、如果是語法錯誤,Command Window中會以命令行的形式告訴您bug所在的文件、行號,以及簡短的錯誤描述,當然擺平這樣的bug你必要有一定Matlab基礎(chǔ)。 2、確保您的變量名在整個代碼中前后一致,注意大小寫,否則不小心敲錯的字母。同理控件的tag屬性在.fig和.m文件中必須同步,比如說你要獲取tag為input1_editText的編輯文本框的string,此時一定注意要與代碼中tag一致,即就是如下所示
3、在code中適當設(shè)置斷點,程序運行到斷點的時候會暫停,此時我們可以方便的獲取程序中的中間變量值,這是一個不錯的調(diào)試方法,也是最經(jīng)常用到的。(斷點如何設(shè)置?在代碼左邊行號旁邊點擊下就設(shè)置了一個斷點了) 4、整個GUI程序的代碼可以到這里下載 5、如果你是剛開始的菜鳥,的確找不到錯誤在哪里,那建議您把整個過程再來一次。當然也可以在本帖后面留言,我會及時處理的。 |
|