當前位置:編程學習大全網 - 編程語言 - guide的程序設計

guide的程序設計

壹. 控件對象及屬性(Object and its attributes of controller))

1. GUI控件對象類型(The mode of controller object)

控件對象是事件響應的圖形界面對象。當某壹事件發生時,應用程序會做出響應並執行某些預定的功能子程序(Callback).

2. 控件對象的描述(Description of controller object)

MATLAB中的控件大致可分為兩種,壹種為動作控件,鼠標點擊這些控件時會產生相應的響應。壹種為靜態控件,是壹種不產生響應的控件,如文本框等。

每種控件都有壹些可以設置的參數,用於表現控件的外形、功能及效果,既屬性。屬性由兩部分組成:屬性名和屬性值,它們必須是成對出現的。

(1) 按鈕(Push Buttons):執行某種預定的功能或操作;

(2) 開關按鈕(Toggle Button):產生壹個動作並指示壹個二進制狀態(開或關),當鼠點擊它時按鈕將下陷,並執行callback(回調函數)中指定的內容,再次點擊,按鈕復原,並再次執行callback中的內容;

(3) 單選框(Radio Button):單個的單選框用來在兩種狀態之間切換,多個單選框組成壹個單選框組時,用戶只能在壹組狀態中選擇單壹的狀態,或稱為單選項;

(4) 復選框(Check Boxes):單個的復選框用來在兩種狀態之間切換,多個復選框組成壹個復選框組時,可使用戶在壹組狀態中作組合式的選擇,或稱為多選項;

(5) 文本編輯器(Editable Texts):用來使用鍵盤輸入字符串的值,可以對編輯框中的內容進行編輯、刪除和替換等操作;

(6) 靜態文本框(Static Texts):僅僅用於顯示單行的說明文字;

(7) 滾動條(Slider): 可輸入指定範圍的數量值;

(8) 邊框(Frames):在圖形窗口圈出壹塊區域;

(9) 列表框(List Boxes):在其中定義壹系列可供選擇的字符串;

(10)彈出式菜單(Popup Menus): 讓用戶從壹列菜單項中選擇壹項作為參數輸入;

(11)坐標軸(Axes): 用於顯示圖形和圖象

3. 控件對象的屬性(Attributes of controller object)

用戶可以在創建控件對象時,設定其屬性值,未指定時將使用系統缺省值。

兩大類控件對象屬性:第壹類是所有控件對象都具有的公***屬性,第二類是控件對象作為圖形對象所具有的屬性。

A, 控件對象的公***屬性

Children取值為空矩陣,因為控件對象沒有自己的子對象

Parent取值為某個圖形窗口對象的句柄,該句柄表明了控件對象所在的圖形窗口

Tag取值為字符串,定義了控件的標識值,在任何程序中都可以通過這個標識值控制該控件對象

Type取值為uicontrol,表明圖形對象的類型

UserDate取值為空矩陣,用於保存與該控件對象相關的重要數據和信息

Visible取值為no 或off,

B,控件對象的基本控制屬性

BackgroundColor取值為顏色的預定義字符或RGB數值

Callback取值為字符串,可以是某個M文件名或壹小段MATLAB語句,當用戶激活某個控件對象時,應用程序就運行該屬性定義的子程序。

Enable取值為on(缺省值),inactive和off

Extend取值為四元素矢量[0 ,0 width, height],記錄控件對象標題字符的位置和尺寸

ForegroundColor取值為顏色的預定義字符或RGB數值

Max,Min取值都為數值

String取值為字符串矩陣或數組,定義控件對象標題或選項內容

Style取值可以是pushbutton, radiobutton, checkbox, edit, text, slider, frame, popupmenu 或listbox

Units取值可以是pixels, normalized, inches, centimeters或points

Value取值可以是矢量,也可以是數值,其含義及解釋依賴於控件對象的類型

C,控件對象的修飾控制屬性

FontAngle取值為normal,italic, oblique,

FontName取值為控件標題等字體的字庫名

FontSize取值為數值,

FontWeight取值為points,normalized, inches, centimeters或pixels

HorizontalAligment取值為left,right,定義對齊方式

D, 控件對象的輔助屬性

ListboxTop取值為數量值

SliderStop取值為兩元素矢量[minstep,maxstep],用於slider控件

Selected取值為on 或off

SlectionHoghlight取值為on 或off

E,Callback管理屬性

BusyAction取值為cancel或queue

ButtDownFun取值為字符串,壹般為某個M文件名或壹小段MATLAB程序

Creatfun取值為字符串,壹般為某個M文件名或壹小段MATLAB程序

DeletFun取值為字符串,壹般為某個M文件名或壹小段MATLAB程序

HandleVisibility取值為on,callback或off

Interruptible取值為on 或off

二.GUI開發環境(GUI DevelopmentEnvironment, GUIDE)MATLAB提供了壹套可視化的創建圖形窗口的工具,使用用戶界面開發環境可方便的創建GUI應用程序, 它可以根據用戶設計的GUI布局,自動生成M文件的框架,用戶使用這壹框架編制自己的應用程序。MATLAB提供了壹套可視化的創建圖形用戶接口(GUI)的工具,包括:*布局編輯器(Layout Edtor)-------在圖形窗口中加入及安排對象。布局編輯器是可以啟動用戶界面的控制面板,上述工具都必須從布局編輯器中訪問,用guide命令可以啟動,或在啟動平臺窗口中選擇GUIDE來啟動布局編輯器。*幾何排列工具(Alignment Tool)-----調整各對象相互之間的幾何關系和位置*屬性編輯器(Property Inspector)-----查詢並設置屬性值*對象瀏覽器Object Browser)-----用於獲得當前MATLAB圖形用戶界面程序中所有的全部對象信息,對象的類型,同時顯示控件的名稱和標識,在控件上雙擊鼠標可以打開該控件的屬性編輯器。*菜單編輯器(Menu Editor)-----建立窗口菜單條的菜單和任何構成布局的彈出菜單在MATLAB中, GUI的設計是以 M文件的編程形式實現的,GUI的布局代碼存儲在M文件和MAT文件中,而在MATLAB6中有了很大的改變,MATLAB6將GUI的布局代碼存儲在 FIG文件中,同時還產生壹個M文件用於存儲調用函數,在M文件中不再包含GUI的布局代碼,在開發應用程序時代碼量大大減少。1. 布局編輯器(Layout editor):用於從控件選擇板上選擇控件對象並放置到布局區去,布局區被激活後就成為圖形窗口。 在命令窗口輸入GUIDE命令或點擊工具欄中的guide圖標都可以打開空白的布局編輯器,在命令窗口輸入GUIDEfilename 可打開壹個已存在的名為filename圖形用戶界面。(1)將控件對象放置到布局區a. 用鼠標選擇並放置控件到布局區內;b. 移動控件到適當的位置;c. 改變控件的大小;d. 選中多個對象的方法;(2) 激活圖形窗口 選Tools菜單中的Activate Figure項或點擊工具條上的ActivareFigure按鈕, 在激活圖形窗口的同時將存儲M 文件和FIG文件,如所建立的布局還沒有進行存儲,用戶界面開發環境將打開壹個Save As對話框,按輸入的文件的名字,存儲壹對同名的M文件和帶有.fig擴展名的FIG文件。(3) 運行GUI程序 在命令窗口直接鍵入文件名或用openfig, open或hgload命令運行GUI程序。(4) 布局編輯器參數設置 選File菜單下的Preferences菜單項打開參數設置窗口,點擊樹狀目錄中的GUIDE,既可以設置布局編輯器的參數。(5) 布局編輯器的彈出菜單 在任壹控件上按下鼠標右鍵,會彈出壹個菜單,通過該菜單可以完成布局編輯器的大部分操作。2. 幾何位置排列工具(Alignment tool) 用於調節各控件對象之間的相對位置。3. 用屬性編輯器設置控件屬性(Set attributes of controller with PropertyInspector) 在屬性編輯器中提供了所有可設置的屬性列表並顯示出當前的屬性。(1)屬性編輯器(Opening PropertyInspector):三種方法:1. 用工具欄上的圖標打開;2. 從View菜單中選擇Property Inspector菜單項;3. 在按鼠標右鍵彈出的Property Inspector菜單中選擇菜單項。(1) 使用屬性編輯器(Using Property Inspector)a. 布置控件b. 定義文本框的屬性c. 定義坐標系d. 定義按鈕屬性e. 定義復選框4. 菜單編輯器(Menu Editor): 包括菜單的設計和編輯,菜單編輯器有八個快捷鍵,可以利用它們任意添加或刪除菜單,可以設置菜單項的屬性,包括名稱(Label)、標識(Tag)、選擇是否顯示分隔線(Separator above this item)、是否在菜單前加上選中標記(Item ischecked)、調用函數(Callback)。5. 對象瀏覽器(Object Browsers):用於瀏覽當前程序所使用的全部對象信息,可以在對象瀏覽器中選種壹個或多個控件來打開該控件的屬性編輯器。

三、GUI程序設計(GUI Program design)

包括圖形界面的設計和功能設計兩個方面

例1: 用於繪圖和圖形旋轉的GUI:

1、 布置控件:壹個坐標系、壹個文本框、壹個復選框,壹個按鈕

2、 定義文本框的屬性:String---簡單設計示例,FontName---隸書,FontSize--22

3、 定義坐標系: Visible—off,

4、 定義按鈕屬性: String—繪圖,FontName,ForegroundColor, ontSize, BackgroundColor,Callback---surf(peaks(30))

5、 定義復選框: String—rotate3D,Callback—rotate3d

例2:設計壹個簡單信號分析儀的程序,要求根據輸入的兩個頻率和時間間隔,計算函數x=sin(2πf1t)+sin(2πf2t) 的值,並對函數進行快速傅立葉變換,最後分別繪制時域和頻域的曲線。

1. 設計圖形界面(GUI Design)

設計步驟:

(1) 在布局編輯器中布置控件,

(2) 使用幾何位置排列工具對控件的位置進行調整;

(3) 設計控件的屬性;

(4) 設置其他繪圖屬性。

2. 設置控件的標識(Set the Tag of controller)

控件的標識(Tag)是對於各控件的識別,每個控件載創建時都會由開發環境自動產生壹個標識,在程序設計中,為了編輯、記憶和維護的方便,壹般為控件設置壹個新的標識。本例設置第壹個坐標軸的標識為:frequency_axes,用於顯示頻域圖形; 第二個坐標軸的標識為:time_axes, 用於顯示時域圖形。三個文本編輯框的標識為f1_input, f2_input, t_input,分別用於輸入兩個頻率和自變量時間的間隔.

3. 編寫代碼(Editcode)

GUI圖形界面的功能,還是要通過壹定的設計思路和計算方法,由特定的程序來實現。為了實現程序的功能,還需要在運行程序前編寫壹些代碼,完成程序中變量的賦值、輸入輸出、計算及繪圖等工作。

壹般方法為,內容為:

%(1)設置對象的初始值;

%分別設置三個文本編輯框的初始值為:

f1_input=20

f2_input=50

f3_input=0:0.001:0.5

%(2)編寫代碼:

%1)從GUI獲得擁護輸入的數據,本例中輸入的三個數據

%分別為頻率1、頻率2和時間間隔。

f1=str2double(get(handles.f1_input,'String'));

f2=str2double(get(handles.f2_input,'String'));

t=eval(get(handles.t_input,'String'));

%2)計算數據,計算函數值,按指定點進行快速傅立葉變

%換,並計算頻域的幅值和頻域分辨率。

x=sin(2*pi*f1*t)+sin(2*pi*f2*t);

y=fft(x,512);

m=y.*conj(y)/512;

f=1000*(0:256)/512;

%3)在第壹個坐標軸中繪制頻域曲線。

axes(handles.frequency_axes)

plot(f,m(1:257))

set(handles.frequency_axes,'XminorTick','on')

gridon

%4)在第二個坐標軸中繪制時域曲線。

axes(handles.time_axes)%選擇適當的坐標軸

plot(t,x)

set(handles.time_axes,'XminorTick','on')

gridon

運行程序(Running program)

例3 :制作壹個曲面光照效果的演示界面,如圖所示,三個彈出式菜單分別用於選擇曲面形式、色彩圖、光照模式和反射模式,三個滾動條用於確定光源的位置,壹個按鈕用於退出演示。

制作要點:

(1)建立壹個靜態文本,用於顯示界面的標題:光照效果演示;

(2)建立坐標軸對象,用於顯示圖形;

(3)建立四個下拉菜單,分別用於選擇繪圖表面的形狀、色圖、光照模式和反射模式,每個下拉菜單的上方都有壹個靜態文本用於說明菜單的作用;

(4)在壹個frame上建立三個滑條用於確定光源的位置,並在frame上方加壹說明;

(5)建立壹個按鈕用於退出演示;

callback函數的內容為:

functionvarargout = pushbutton1_Callback(h, eventdata, handles, varargin)

delete(handles.figure1)

%--------------------------------------------------------------------

functionvarargout = popupmenu1_Callback(h, eventdata, handles, varargin)

val=get(h,'value');

switchval

case1

surf(peaks);

case2

sphere(30);

case3

membrane

case4

[x,y]=meshgrid(-4:.1:4);

r=sqrt(x.^2+y.^2)+eps;

z=sinc(r);

surf(x,y,z)

case5

[x,y]=meshgrid([-1.5:.3:1.5],[-1:0.2:1]);

z=sqrt(4-x.^2/9-y.^2/4);

surf(x,y,z);

case6

t=0:pi/12:3*pi;

r=abs(exp(-t/4).*sin(t));

[x,y,z]=cylinder(r,30);

surf(x,y,z);

end

shadinginterp

light('Position',[-3-2 1]);

axisoff

%--------------------------------------------------------------------

functionvarargout = radiobutton1_Callback(h, eventdata, handles, varargin)

set(h,'value',1)

set(handles.radiobutton2,'value',0)

set(handles.radiobutton3,'value',0)

set(handles.radiobutton4,'value',0)

lightingflat

%--------------------------------------------------------------------

functionvarargout = radiobutton2_Callback(h, eventdata, handles, varargin)

set(h,'value',1)

set(handles.radiobutton1,'value',0)

set(handles.radiobutton3,'value',0)

set(handles.radiobutton4,'value',0)

lightinggouraud

%--------------------------------------------------------------------

functionvarargout = radiobutton3_Callback(h, eventdata, handles, varargin)

set(h,'value',1)

set(handles.radiobutton1,'value',0)

set(handles.radiobutton2,'value',0)

set(handles.radiobutton4,'value',0)

lightingphong

%--------------------------------------------------------------------

functionvarargout = radiobutton4_Callback(h, eventdata, handles, varargin)

set(h,'value',1)

set(handles.radiobutton1,'value',0)

set(handles.radiobutton3,'value',0)

set(handles.radiobutton3,'value',0)

lightingnone

%--------------------------------------------------------------------

functionvarargout = popupmenu2_Callback(h, eventdata, handles, varargin)

val=get(h,'value');

switchval

case1

colormap(jet)

case2

colormap(hot)

case3

colormap(cool)

case4

colormap(copper)

case5

colormap(pink)

case6

colormap(spring)

case7

colormap(summer)

case8

colormap(autumn)

case9

colormap(winter)

end

%--------------------------------------------------------------------

functionvarargout = popupmenu3_Callback(h, eventdata, handles, varargin)

val=get(h,'value');

switchval

case1

lighting flat

case2

lighting gouraud

case3

lighting phong

case4

lighting none

end

%--------------------------------------------------------------------

functionvarargout = popupmenu4_Callback(h, eventdata, handles, varargin)

val=get(h,'value');

switchval

case1

material shiny

case2

material dull

case3

material metal

case4

material default

end

%--------------------------------------------------------------------

functionvarargout = slider1_Callback(h, eventdata, handles, varargin)

val=get(h,'value');

set(handles.edit1,'string',num2str(val));

lx==val;ly=get(handles.slider2,'value'); ly=get(handles.slider3,'value');

light('Position',[xy z]);

%--------------------------------------------------------------------

functionvarargout = edit1_Callback(h, eventdata, handles, varargin)

str=get(h,'string');

set(handles.slider1,'value',str2num(str));

lx==str2num(str);ly=get(handles.slider2,'value'); ly=get(handles.slider3,'value');

light('Position',[xy z]);

%--------------------------------------------------------------------

functionvarargout = slider2_Callback(h, eventdata, handles, varargin)

val=get(h,'value');

set(handles.edit2,'string',num2str(val));

lx=get(handles.slider1,'value');lx==val; ly=get(handles.slider3,'value');

light('Position',[xy z]);

%--------------------------------------------------------------------

functionvarargout = edit2_Callback(h, eventdata, handles, varargin)

str=get(h,'string');

set(handles.slider2,'value',str2num(str));

%--------------------------------------------------------------------

functionvarargout = slider3_Callback(h, eventdata, handles, varargin)

val=get(h,'value');

set(handles.edit3,'string',num2str(val));

%--------------------------------------------------------------------

functionvarargout = edit3_Callback(h, eventdata, handles, varargin)

str=get(h,'string');

set(handles.slider3,'value',str2num(str));

*對話框設計:在圖形用戶界面程序設計中,對話框是重要的信息顯示和獲取輸入數據的用戶界面對象。

1、公***對話框:

公***對話框是利用windows資源的對話框,包括文件打開、文件保存、顏色設置、字體設置、打印設置等。

1) 文件打開對話框:用於打開文件

uigetfile

uigetfile(‘FilterSpec’)

uigetfile(‘FilterSpec’,’DialogTitle’)

uigetfile(‘FilterSpec’,’DialogTitle’,x,y)

[fname,pname]=uigetfile(…)

2) 文件保存對話框:用於保存文件

uiputfile

uiputfile(‘InitFile’)

uiputfile(‘InitFile’,’DialogTitle’)

uiputfile(‘InitFile’,’DialogTitle’,x,y)

[fname,pname]=uiputfile(…)

3) 顏色設置對話框:用於圖形對象顏色的交互設置

c=uisetcolor(‘h_or_c,’DialogTitle’)

4) 字體設置對話框:用於字體屬性的交互式設置

uisetfont

uisetfont(h)

uisetfont(S)

uisetfont(h,’DialogTitle’)

uisetfont(S,’DialogTitle’)

S=uisetfont(…)

5) 打印設置對話框:用於打印頁面的交互式設置

dlg=pagesetupdlg(fig)

pagedlg

pagedlg(fig)

6) 打印預覽對話框:用於對打印頁面進行預覽

printpreview

printpreview(f)

7) 打印對話框:

printdlg

printdlg(fig)

printdlg(‘-crossplatform’,fig)

printdlg(-‘setup’,fig)

2、MATLAB專用對話框

1)錯誤信息對話框:用於提示錯誤信息

errordlg打開默認的錯誤信息對話框

errordlg(‘errorstring’)打開顯示’errorstring’信息的錯誤信息對話框

errordlg(‘errorstring’,’dlgname’)打開顯示’errorstring’信息的錯誤信息對話框,對話框的標題由‘dlgname’指定

erordlg(‘errorstring’,’dlgname’,’on’)打開顯示’errorstring’信息的錯誤信息對話框,對話框的標題由‘dlgname’指定. 如果對話框已存在,’on’參數將對話框顯示在最前端。

h=errodlg(…)返回對話框句柄

例:errordlg('輸入錯誤,請重新輸入','錯誤信息')

2) 幫助對話框:用於幫助提示信息

helpdlg 打開默認的幫助對話框

helpdlg(‘helpstring’)打開顯示’errorstring’信息的幫助對話框,

helpdlg(‘helpstring’,’dlgname’)打開顯示’errorstring’信息的幫助對話框, 對話框的標題由‘dlgname’指定

h=helpdlg(…)返回對話框句柄

例:helpdlg('矩陣尺寸必須相等','在線幫助')

3) 輸入對話框:用於輸入信息

answer=inputdlg(prompt)打開輸入對話框,prompt為單元數組,用於定義輸入數據窗口的個數和顯示提示信息,answer為用於存儲輸入數據的單元數組。

answer=inputdlg(prompt,title)與上者相同,title確定對話框的標題。

answer=inputdlg(prompt,title,lineNo)參數lineNo可以是標量、列矢量或m×2階矩陣,若為標量,表示每個輸入窗口的行數均為lineNo;若為列矢量,則每個輸入窗口的行數由列矢量lineNo的每個元素確定;若為矩陣,每個元素對應壹個輸入窗口,每行的第壹列為輸入窗口的行數,第二列為輸入窗口的寬度。

answer=inputdlg(prompt,title,lineNo,defAns) 參數defans為壹個單元數組,存儲每個輸入數據的默認值,元素個數必須與prompt 所定義的輸入窗口數相同,所有元素必須是字符串。

answer=inputdlg(prompt,title,lineNo,defAns,Sesize) 參數resize決定輸入對話框的大小能否被調整,可選值為on或off.

例:prompt={'Input Name','Input Age'};

title='InputName and Age';

lines=[21]';

def={'JohnSmith','35'};

answer=inputdlg(prompt,title,lines,def);

4) 列表選擇對話框:用於在多個選項中選擇需要的值

[selection,ok]=listdlg(‘Liststring’,S,…)輸出參數selection為壹個矢量,存儲所選擇的列表項的索引號,

輸入參數為可選項’Liststring’(單元數組), ’SelectionMode’(’single’或’multiple’,’ListSize’([wight,height]), ’Name’ (對話框標題)等

5) 信息提示對話框:用於顯示提示信息

msgbox(message)打開信息提示對話框,顯示message信息。

msgbox(message,title)title確定對話框標題。

msgbox(message,title,’icon’)icon用於顯示圖標,可選圖標包括:none(無圖標)/error/help/warn/custom(用戶定義)

msgbox(message,title,’custom’,icondata,iconcmap)當使用用戶定義圖標時,icondata為定義圖標的圖像數據,iconcmap為圖像的色彩圖。

msgbox(…,’creatmode’)選擇模式creatmode,選項為:modal, non_modal, 和replace。

h=msgbox(…) 返回對話框句柄

6) 問題提示對話框:用於回答問題的多種選擇

button=questdlg(‘qstring’)打開問題提示對話框,有三個按鈕,分別為:yes,no和cancel,’questdlg’確定提示信息。

button=questdlg(‘qstring’,’title’)title確定對話框標題。

button=questdlg(‘qstring’’title’,’default’)當按回車鍵時,返回default值default 必須是yes,no或cancel之壹。

button=questdlg(‘qstring’,’title’,’str1’,’str2’,’default’)打開問題提示對話框,有兩個按鈕,分別由str1和str2確定,’qstdlg’確定提示信息,default必須是str1或str2之壹。

button=questdlg(‘qstring’,’title’,’str1’,’str2’,’str3’,’default’) 打開問題提示對話框,有三個按鈕,分別由str1,str2和str3確定,’qstdlg’確定提示信息,default必須是str1, str2或str3之壹。

7) 進程條:以圖形方式顯示運算或處理的進程

h=waitbar(x,’title’)顯示以title為標題的進程條,x為進程條的比例長度,其值必須在0到1之間,h為返回的進程條對象的句柄。

waitbar(x,’title’,’creatcancelbtn’,’button_callback’)在進程條上使用creatcancelbtn參數創建壹個撤銷按鈕,在進程中按下撤銷按鈕將調用button_callback函數。

waitbar(…,property_name,property_value,…)選擇其它由prompt_name定義的參數,參數值由prompt_value指定。

例:

h=waitbar(0,'pleaswait...');

fori=1:10000

waitbar(i/10000,h)

end

close(h)

8)警告信息對話框:用於提示警告信息

h=warndlg(‘warningstring’,’dlgname’)打開警告信息對話框,顯示warningstring信息,dlgname確定對話框標題,h為返回對話句柄。

  • 上一篇:物聯網的嵌入式學習項目有哪些?
  • 下一篇:怎麽選監控
  • copyright 2024編程學習大全網