MATLAB軟件GUIDE為用戶提供了一個方便高效的集成環(huán)境, 所有GUI支持的用戶控件都集成在這個環(huán)境中, 并提供界面外觀、屬性和行為響應方式的設置方法。GUIDE將用戶保存設計好的GUI界面保存在一個FIG資源文件中, 同時自動生成包含GUI初始化和組件界面布局控制代碼的M文件, 為實現(xiàn)回調函數(shù)提供了一個參考框架。
下面以一個具體實例來說明GUIDE的開發(fā)使用以下所講解的關于各控件的使用, 我們以MATLAB7.0版本為調試環(huán)境, 如果版本的環(huán)境和版本略有不同,但基本思想和方法一致。為了方便大家學習,此處提供二個版本(即文字和視頻,文字的即為下面的敘述,視頻請點擊此處。)
實例要完成的功能如下:
首先運行M文件后,出現(xiàn)一個主畫面
當分別點擊按鈕“螺旋線”、“內擺線”、“圓旋轉成圓環(huán)”和“退出”命令按鈕時,分別出現(xiàn)如下列圖示的動態(tài)、靜態(tài)的結果。
螺旋線圖
內擺線圖
圓動成環(huán)圖
退出信息圖
下面看具體的操作步驟:
1)啟動Matlab并進入GUIDE環(huán)境:在Command Window下輸入“guide”,進入GUIDE環(huán)境。出現(xiàn)如下圖所示的界面(寫到這里,發(fā)現(xiàn)文字敘述很繁瑣,但還得寫,要命)。這里Matlab提供了一個新建空白界面及三個樣本界面,它們分別是:GUI with Uicontrols;GUI with Axes and Menu;Modal Question Dialog;當然還有一個標簽是用來打開已經(jīng)編寫好的GUI的。一般來說,我們會用Blank GUI,即空白的界面來寫自己的東西。進入后,Matlab就新建了一個fig文件(默認名是untitled.fig),同時得到如下的編輯窗口:
從上圖我們可以看出Matlab 的Guide環(huán)境可以分為三個部分即菜單欄和工具欄、用戶控件集、用戶界面編輯窗口。菜單欄,暫時不作介紹,我們主要使用用戶控件集(其它軟件一般稱為工具箱),用戶控件集主要有命令按鈕(Push Button)、切換按鈕(Toggle Button)、單選按鈕(Radio Button)、復選框按鈕(Checkbox)、編輯框(Edit Button)、靜態(tài)文本框(Static Button)
、滾動桿(Slider)、列表框(Listbox)、彈出式菜單(Pop-menu)、坐標軸(Axes)等。嚴格地講, 坐標軸不能算控件的范疇。用戶界面編輯窗口用于對受控的圖形窗口進行編輯, 比如添加按鈕、靜態(tài)文本框等。
首先,在用戶界面編輯窗口添加4個命令按鈕(顯示是OK的用個PUSH BUTTON),再如下圖所示添加5個靜態(tài)文本框(Static Text)、5個編輯文本框(Edit Text)和一個坐標系(Axes)
其次,按下表設置每個控件的屬性值(具體操作是:右擊要設置屬性的控件——property inspector 命令——在彈出的屬性窗口中找到相應的屬性名稱——將該屬性的值修改成自己需要的值)
控件名 | 屬性 | 屬性修改值 |
PushButton1 | FontSize | 16 |
String | 螺旋線 | |
Tag | pushbuttonLxx | |
PushButton2 | FontSize | 16 |
String | 內擺線 | |
Tag | pushbuttonNBX | |
PushButton3 | FontSize | 16 |
String | 圓旋轉成圓環(huán) | |
Tag | pushbuttonCtoC | |
PushButton4 | FontSize | 16 |
String | 退出 | |
Tag | pushbuttonExit | |
Static Text1 | String | 大圓半徑 |
Static Text2 | String | 小圓半徑 |
Static Text3 | String | 修正值 |
Static Text4 | String | 圓半徑 |
Static Text5 | String | 離轉軸的距離 |
Edit Text1 | String | 空或設置成一個適定值,如10 |
Tag | editBCR | |
Edit Text2 | String | 空或設置成一個適定值,如2 |
Tag | editSCR | |
Edit Text3 | String | 空或設置成一個適定值,如1 |
Tag | editXZZ | |
Edit Text4 | String | 空或設置成一個適定值,如4 |
Tag | editCR | |
Edit Text5 | String | 空或設置成一個適定值,如10 |
Tag | editBExit |
注:上面控件名稱的編號,比如1,2之類,在界面上是沒有的,只是我按照從上到下的次序,為方便敘述而編寫的。
最后,添加程序(在添加程序前,最好先將文件保存一下,比如以Exp8.m為文件名保存),添加程序的常用方法是:單擊菜單命令view——M-file Editor,此時,得到下面的程序:
function varargout = Exp8(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',
if nargin && ischar(varargin{1})
end
if nargout
else
end
%上面的是系統(tǒng)初始化代碼,絕對不要去修改它們。
function Exp8_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
%上面的代碼,告訴我們,一般的用戶界面的自己設置的初始化狀態(tài)應添加在這個函數(shù)內。
function varargout = Exp8_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
%上面的函數(shù)返回的量直接到命令窗口。
function pushbuttonLxx_Callback(hObject, eventdata, handles)
%上面的函數(shù)是點擊螺旋線按鈕時,執(zhí)行的代碼,即可以在此處添加有關螺旋線的程序代碼。
function pushbuttonNBX_Callback(hObject, eventdata, handles)
%上面的函數(shù)是點擊內擺線按鈕時,執(zhí)行的代碼,即可以在此處添加有關內擺線的程序代碼。
% --- Executes on button press in pushbuttonExit.
function pushbuttonExit_Callback(hObject, eventdata, handles)
%上面的函數(shù)是點擊退出按鈕時,執(zhí)行的代碼,即可以在此處添加退出時的程序代碼。
function editBCR_Callback(hObject, eventdata, handles)
%上面的函數(shù)是 editBCR這個編輯文本按鈕回調時,執(zhí)行的代碼。
BigCircleRadial=str2double(get(hObject,'String'));
function editBCR_CreateFcn(hObject, eventdata, handles)
if ispc
else
end
function editSCR_Callback(hObject, eventdata, handles)
%上面的函數(shù)是editSCR這個編輯文本按鈕回調時,執(zhí)行的代碼。
function editSCR_CreateFcn(hObject, eventdata, handles)
if ispc
else
end
function editXZZ_Callback(hObject, eventdata, handles)
%上面的函數(shù)是editXZZ這個編輯文本按鈕回調時,執(zhí)行的代碼。
function editXZZ_CreateFcn(hObject, eventdata, handles)
if ispc
else
end
function pushbuttonCtoC_Callback(hObject, eventdata, handles)
%上面的函數(shù)是點擊圓旋轉成圓環(huán)按鈕時,執(zhí)行的代碼,即可以在此處添加圓旋轉成圓環(huán)時的程序代碼。
function editCR_Callback(hObject, eventdata, handles)
%上面的函數(shù)是editCR這個編輯文本按鈕回調時,執(zhí)行的代碼。
function editCR_CreateFcn(hObject, eventdata, handles)
if ispc
else
end
function editDist_Callback(hObject, eventdata, handles)
function editDist_CreateFcn(hObject, eventdata, handles)
if ispc
else
end
下面真正添加自己的程序,最后成的程序如下:自己添加的程序用紅色表示。
function varargout = Exp8(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',
if nargin && ischar(varargin{1})
end
if nargout
else
end
%上面的是系統(tǒng)初始化代碼,絕對不要去修改它們。
function Exp8_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
%這里選擇了一個圖片文件,作為初始畫面,具體的圖片可以選擇自己喜歡的。
map1=imread('Water lilies.jpg');
image(map1)
%上面的代碼,告訴我們,一般的用戶界面的自己設置的初始化狀態(tài)應添加在這個函數(shù)內。
function varargout = Exp8_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
%上面的函數(shù)返回的量直接到命令窗口。
function pushbuttonLxx_Callback(hObject, eventdata, handles)
%上面的函數(shù)是點擊螺旋線按鈕時,執(zhí)行的代碼,即可以在此處添加有關螺旋線的程序代碼。
axes(handles.axes1)
cla
v=2;
alf=pi/6;
omg=pi/5;
t=0:0.01:100;
x=v*sin(alf).*cos(omg*t).*t;
y=v*sin(alf).*sin(omg*t).*t;
z=v*cos(alf).*t;
%plot3(x,y,z)
axis([-100 100 -100 100 0 160])
grid on
axis equal on
comet3(x,y,z)
%上面的程序是“一質點,沿著已知圓錐面的一條直母線自圓錐的頂點起,作等速直線運動,另一方面這一條母線在圓錐面上,過圓錐的頂點繞圓錐的軸(旋轉軸)作等速的轉動,這時質點在圓錐面上的軌跡”的動態(tài)形成過程。
function pushbuttonNBX_Callback(hObject, eventdata, handles)
%上面的函數(shù)是點擊內擺線按鈕時,執(zhí)行的代碼,即可以在此處添加有關內擺線的程序代碼。
axes(handles.axes1)
cla
a=str2double(get(handles.editBCR,'String'));
b=str2double(get(handles.editSCR,'String'));
k=str2double(get(handles.editXZZ,'String'));
axis([-a-2 a+2 -a-2 a+2 0 a+2])
line([-a-2,a+2],[0,0]);
hold on
line([0,0],[-a-2,a+2
u=0:pi/30:2*pi;
x=a*cos(u);
y=a*sin(u);
plot(x,y)
x=b*cos(u)+a-b;
y=b*sin(u);
plot(x,y)
axis equal on
grid on
theta=0:pi/1800:k*a*pi;
x=(a-b)*cos(b/a*theta)+b*cos((a-b)/a*theta);
y=(a-b)*sin(b/a*theta)-b*sin((a-b)/a*theta);
comet(x,y)
%上面的程序是內擺線的動態(tài)的形成過程
% --- Executes on button press in pushbuttonExit.
function pushbuttonExit_Callback(hObject, eventdata, handles)
%上面的函數(shù)是點擊退出按鈕時,執(zhí)行的代碼,即可以在此處添加退出時的程序代碼。
ss=questdlg('你真的要退出嗎?','退出信息窗口!','不,我還想看看!','是的,我要退出!','是的,我要退出!');
switch ss
end
%上面的程序是退出程序時信息窗口
function editBCR_Callback(hObject, eventdata, handles)
%上面的函數(shù)是 editBCR這個編輯文本按鈕回調時,執(zhí)行的代碼。
function editBCR_CreateFcn(hObject, eventdata, handles)
if ispc
else
end
function editSCR_Callback(hObject, eventdata, handles)
%上面的函數(shù)是editSCR這個編輯文本按鈕回調時,執(zhí)行的代碼。
function editSCR_CreateFcn(hObject, eventdata, handles)
if ispc
else
end
function editXZZ_Callback(hObject, eventdata, handles)
%上面的函數(shù)是editXZZ這個編輯文本按鈕回調時,執(zhí)行的代碼。
function editXZZ_CreateFcn(hObject, eventdata, handles)
if ispc
else
end
function pushbuttonCtoC_Callback(hObject, eventdata, handles)
%上面的函數(shù)是點擊圓旋轉成圓環(huán)按鈕時,執(zhí)行的代碼,即可以在此處添加圓旋轉成圓環(huán)時的程序代碼。
axes(handles.axes1)
cla
%a=4;
%b=10;
a=str2double(get(handles.editCR,'String'));
b=str2double(get(handles.editDist,'String'));
u=0:pi/30:2*pi;
y=a.*cos(u)+b;
z=a.*sin(u);
n=length(u);
x=0*ones(1,n);
if a<b
axis([-b-2 b+2 -b-2 b+2 -a-2 a+2])
else
axis([-a-2 a+2 -a-2 a+2 -b-2 b+2])
end
plot3(x,y,z)
pause(1)
for t=0:pi/60:2*pi
end
%上面的程序是圓旋轉成圓環(huán)的動態(tài)的形成過程
function editCR_Callback(hObject, eventdata, handles)
%上面的函數(shù)是editCR這個編輯文本按鈕回調時,執(zhí)行的代碼。
function editCR_CreateFcn(hObject, eventdata, handles)
if ispc
else
end
function editDist_Callback(hObject, eventdata, handles)
function editDist_CreateFcn(hObject, eventdata, handles)
if ispc
else
end