小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

[教程] GUI指導(dǎo)教程系列(1):GUI入門基本操作(轉(zhuǎn)載)

 昵稱9230077 2012-03-21
為什么在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é)果。

image067.png 

什么Matlab還沒有安裝?天呀,那請您先看下論壇的【MATLAB下載安裝】版塊(最新版本2009b,4.75GB),里面有您在Matlab下載安裝過程中需要的一些資料!


好下面開始我們的教程!

一、打開和創(chuàng)建GUI界面

1、首先打開Matlab,在Command Window中輸入guide回車

image003.png 

當然也可以通過工具欄的GUIDE按鈕直接打開

image004.png 

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ù)需要其它的

image005.png 

2.3 點擊“OK”我們正式進入GUIDE界面,呵呵,是不是感覺似曾相識

image007.png 

3、添加你需要的控件到figure中

在添加控件之前,您最好對您的GUI界面布局已經(jīng)有一定的構(gòu)思了,否則盲目性太大了不利于您的編程。下面是我們構(gòu)思的布局

image009.png
二、添加控件和設(shè)置屬性

在正式講解之前,我們先講解下GUI中的鼠標基本操作

(a) 在左邊的控件面板中鼠標左擊選擇您需要的控件,然后放開鼠標
(b) 在右邊的figure中按住左鍵,畫出您的控件,于是空間就在figure上
(c) 你可以用鼠標拖拽figure上所有控件,來改變他們的位置
(d) 在控件上雙擊鼠標左鍵(右擊是快捷菜單)可打開控件屬性面板

1、從上面的布局構(gòu)思,我們知道本GUI需要以下控件

edit-icon.png :兩個“編輯文本框”(Edit Text)
static-icon.png :四個“靜態(tài)文本框”(Static Text)
pushbutton-icon.png :一個“確定按鈕”(Pushbutton)

按照上面介紹的鼠標操作方法,將這6個控件拖到右邊的figure中,如下圖所示

image037.png 

2、接下來就是編輯這些控件的屬性

好,下面從Static Text開始吧,雙擊其中一個“靜態(tài)文本塊”,將跳出該控件的“屬性查看器”(Property Inspector)

image039.png 

GUI控件的幾個常用屬性說明如下:

position:指示空間在figure中的位置
font**:字體相關(guān)屬性
string:相當如VB中的caption,就是顯示在控件上的文字
tag:控件的唯一標識符,相當于ID,我們需要tag來指定某一個空間

2.1 在這里我們修改它的“string”屬性為“+”

image041.png

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”

image045.png 

于是,我們將得到如下所示的GUI界面

image047.png 

2.4 下面雙擊Edit Text,修改編輯文本框的屬性
(1)第一個“Edit Text”的用來存儲第一個加數(shù),我們將“string”改為“0”,“tag”改為“input1_editText”

image049.png 

(2)第二個“Edit Text”的用來存儲第二個加數(shù),我們將“string”改為“0”,“tag”改為“input2_editText”

2.5 修改Pushbutton按鈕的屬性,“string”改為“Add!”,“tag”改為“add_pushbutton”

image051.png 

再次預(yù)覽下我們現(xiàn)在得到的GUI界面

image053.png 

3、重新布局和移動控件位置,使其美觀

image055.png 

將上面編輯完的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ù)按鈕 fx.png ,可以讓我們快速跳轉(zhuǎn)我們需要的函數(shù)位置!這個在.m內(nèi)容很多的時候很有用哦!

1、在Editor中工具欄的函數(shù)Show Function中選擇input1_editText_Callback

fx2.png 

或者右擊tag為input1_editText的編輯文本框,View Callback→Callback

viewcallback.png 

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');
b = get(handles.input2_editText,'String');
% a和b是字符串變量,我們需要使用str2double函數(shù)將其轉(zhuǎn)換為數(shù)值
% 然后才能相加,否則字符串是沒法相加的
total = str2num(a) + str2num(b);  % 格式轉(zhuǎn)換,轉(zhuǎn)換為數(shù)值
% 由于string屬性是字符串,所以必須將兩個數(shù)的和轉(zhuǎn)換為字符串
c = num2str(total); % 轉(zhuǎn)換為字符串
%  將結(jié)果賦值給answer_staticText空間的string屬性,于是就可以顯示結(jié)果了
set(handles.answer_staticText,'String',c);
guidata(hObject, handles); % 更新結(jié)構(gòu)體

恭喜您,到此為此這個GUI程序就完成了!接下來就可以運行和演示它了!


有一個小技巧要告訴大家的,如果您在第一次保存GUI程序時,不想讓Matlab為每一個callback回調(diào)函數(shù)自動生成注釋文本,可以如下操作:File→Preferences...

prefer.png 

如果不想讓Matlab自動生成fig文件,而只是生成M文件,可以如下操作:Tools→GUI Option

guoptions.png 
四、GUI程序打開、運行和發(fā)布

1、想在GUIDE中打開一個寫好的GUI程序,可有兩種方法

1.1 如上面所說的,在打開GUIDE界面時,我們可以選擇“Open Existing GUI”,然后選中你需要打開的GUI程序

open.png 

1.2 直接在Current Directory選中*.fig文件,然后右擊選擇“Open In GUIDE”

open2.png 


2、運行編輯好的GUI程序方法主要有三種方法

2.1 點擊GUIDE工具欄的run按鈕 guide_play.png ,如下圖所示

image062.png 

2.2 從Command Window命令行運行,首先將MATLAB當前目錄切換到*.fig和*.m文件所在目錄(兩個必須同在當前目錄或者都在搜索路徑下)

image063.png 

接著在Command Window中輸入GUI的文件名(不需要擴展名)myAdder,然后回車

image065.png 

2.3 直接在Current Directory中選中myAdder.m,右擊選擇“Run File”即可

通過上面三種方法中任意一種,GUI程序?qū)㈤_始運行,并顯示如下


image067.png 

3、執(zhí)行GUI程序功能

在兩個文本框中輸入分別輸入兩個加數(shù),然后點擊Add!按鈕,此時和將顯示在“=”右邊的文本框中!
五、程序常見問題(bug)解答

如果你的GUI程序沒有正確運行,或者頻頻報錯,而苦于沒法找到錯誤在哪里,這里有幾條小技巧希望能幫助您找到bug。

1、如果是語法錯誤,Command Window中會以命令行的形式告訴您bug所在的文件、行號,以及簡短的錯誤描述,當然擺平這樣的bug你必要有一定Matlab基礎(chǔ)。

2、確保您的變量名在整個代碼中前后一致,注意大小寫,否則不小心敲錯的字母。同理控件的tag屬性在.fig和.m文件中必須同步,比如說你要獲取tag為input1_editText的編輯文本框的string,此時一定注意要與代碼中tag一致,即就是如下所示
  1. a = get(handles.input1_editText,'String');
復(fù)制代碼
這一條特別是在你重新修改某個控件的tag之后尤為值得注意。

3、在code中適當設(shè)置斷點,程序運行到斷點的時候會暫停,此時我們可以方便的獲取程序中的中間變量值,這是一個不錯的調(diào)試方法,也是最經(jīng)常用到的。(斷點如何設(shè)置?在代碼左邊行號旁邊點擊下就設(shè)置了一個斷點了)

4、整個GUI程序的代碼可以到這里下載 GUI_beginner.zip (4.52 KB, 下載次數(shù): 715) ,你可以對比下兩個程序。

5、如果你是剛開始的菜鳥,的確找不到錯誤在哪里,那建議您把整個過程再來一次。當然也可以在本帖后面留言,我會及時處理的。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多