《新編MATLAB自學(xué)一本通》課件第5章 圖形用戶界面(GUI)編程_第1頁
《新編MATLAB自學(xué)一本通》課件第5章 圖形用戶界面(GUI)編程_第2頁
《新編MATLAB自學(xué)一本通》課件第5章 圖形用戶界面(GUI)編程_第3頁
《新編MATLAB自學(xué)一本通》課件第5章 圖形用戶界面(GUI)編程_第4頁
《新編MATLAB自學(xué)一本通》課件第5章 圖形用戶界面(GUI)編程_第5頁
已閱讀5頁,還剩152頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2025/4/30主要內(nèi)容圖形對象

圖形用戶界面的設(shè)計原則和步驟圖形用戶界面的開發(fā)方法直接編寫M文件開發(fā)圖形用戶界面

利用GUIDE工具開發(fā)圖形用戶界面

典型案例介紹

2025/4/30第一節(jié)圖形對象2025/4/301、圖形對象:

MATLAB用來顯示數(shù)據(jù)和創(chuàng)建圖形用戶界面的基本元素。例如:程序界面上的按鈕、菜單、工具條等。

2、圖形對象的標(biāo)識:使用“句柄”來標(biāo)識每一個圖形對象的實(shí)例。通過句柄,用戶就可以找到相應(yīng)圖形對象的各項(xiàng)屬性,進(jìn)而修改這些屬性,以產(chǎn)生不同的圖形呈現(xiàn)效果。一、圖形對象的概念2025/4/30

如右圖所示的圖形用戶界面包括如下圖形對象:(1)一個坐標(biāo)軸,用來在其中繪圖;(2)一個彈出式菜單,列出MATLAB中的三個函數(shù):peaks、membrane和sinc;(3)一個靜態(tài)文本框,提示用戶選擇彈出式菜單項(xiàng);(4)三個下壓按鈕,用來調(diào)用相應(yīng)的繪圖命令來繪制圖形。2025/4/30二、圖形對象的類型1.圖形對象的層次關(guān)系

根據(jù)圖形對象之間的依賴關(guān)系,MATLAB將所有圖形對象組織在一個樹形結(jié)構(gòu)的層次關(guān)系表中,如下圖所示。處在樹形結(jié)構(gòu)上層的對象是下層對象的父對象;處在樹形結(jié)構(gòu)下層的對象是上層對象的子對象。例如:axes對象是figure對象的子對象,或者說figure對象是axes對象的父對象。2025/4/30對象類型父對象對象描述根對象root無對應(yīng)于計算機(jī)的屏幕圖形窗口對象figureroot屏幕上的一個圖形窗口,句柄值是整數(shù),在窗口的標(biāo)題中給出,如1、2、3、…坐標(biāo)軸axesfigure在圖形窗口中定義一個圖形區(qū)域,用來描述子對象的位置和方向用戶控件uicontrolfigure用戶界面控制。當(dāng)用戶點(diǎn)擊對象時,MATLAB完成一個相應(yīng)的動作用戶菜單uimenufigure創(chuàng)建一個窗口菜單,用戶使用菜單來控制程序運(yùn)行現(xiàn)場菜單uicontextmenufigure創(chuàng)建與圖形對象關(guān)聯(lián)的快捷菜單圖像imageaxes用當(dāng)前的色圖矩陣定義一個圖像。圖像可以有自己的色圖燈光lightaxes影響補(bǔ)片和曲面對象的光源線條lineaxes使用plot、plot3、contour和contour3等函數(shù)創(chuàng)建的一些簡單的圖形補(bǔ)片patchaxes創(chuàng)建有邊界的填充多邊形矩形rectangleaxes從橢圓到矩形變化的二維形狀曲面surfaceaxes將數(shù)據(jù)作為x-y平面高度創(chuàng)建的三維矩陣數(shù)據(jù)描述文本textaxes字符串,它的位置由其父對象來指定2、MATLAB圖形對象種類

2025/4/30

在進(jìn)行圖形用戶界面編程時,用戶最關(guān)心的是電腦屏幕的尺寸,用戶需要根據(jù)電腦屏幕的尺寸(通常用像素點(diǎn)來表示)來確定圖形窗口的尺寸大小。【例】在命令窗口中輸入命令以查詢計算機(jī)屏幕的尺寸【注】計算機(jī)屏幕是一個根對象(root)。在MATLAB中,可以使用set和get命令來設(shè)置它的屬性。通常,root對象的所有屬性都采用默認(rèn)值,用戶不必進(jìn)行修改。

root對象的句柄值為0。>>get(0,‘Units’)%取得表示屏幕尺寸的單位,默認(rèn)為像素(pixels)ans=pixels>>get(0,‘ScreenSize’)%取得屏幕的尺寸,為1280×800像素點(diǎn)ans=1112808002025/4/30三、圖形對象的屬性

圖形對象的屬性可以控制對象的外觀和行為等許多方面的性質(zhì)。

對象的屬性既包括對象的一般信息,例如對象的類型、父對象和子對象等;又包括對象的特定的、獨(dú)一無二的信息,例如figure對象中對鼠標(biāo)控制的WindowButtonDownFcn、WindowButtonMotionFcn等屬性。MATLAB將圖形對象的信息組織成一個層次表,并將這些信息儲存在該對象的屬性中。例如,root屬性表包括當(dāng)前圖形窗口的句柄和當(dāng)前的指針位置;figure屬性表包括其子對象的列表并始終跟蹤窗口中發(fā)生的特定事件,等等。2025/4/30

一些屬性對于所有的圖形對象來說具有相同的含義。下表列出了圖形對象的這些共有的屬性。對象類型對象描述BusyAction控制MATLAB處理特定對象回調(diào)函數(shù)中斷的方法。如果Interruptible設(shè)置為’off’,BusyAction可以有下面幾種情況:‘queue’:此為缺省值。表示將回調(diào)函數(shù)的中斷請求放入一個掛起隊(duì)列中直到對象的回調(diào)函數(shù)完成;‘cancel’:忽略其它回調(diào)函數(shù)所有可能的中斷ButtonDownFcn定義用鼠標(biāo)左鍵點(diǎn)擊圖形對象時執(zhí)行的回調(diào)函數(shù)Children保存對象的所有子對象句柄的向量Clipping圖形對象顯示模式?!痮n’(缺省值):只顯示在坐標(biāo)軸界限內(nèi)的部分圖形對象;’off’:同時顯示坐標(biāo)軸界限內(nèi)外的部分CreateFcn創(chuàng)建圖形對象時執(zhí)行的回調(diào)函數(shù),常用缺省值DeleteFcn用戶銷毀圖形對象時執(zhí)行的回調(diào)函數(shù)HandleVisibility控制對象句柄的訪問方式?!畂n’:(缺省值),總是可以訪問;‘callback’:只有回調(diào)函數(shù)或者調(diào)用回調(diào)函數(shù)的函數(shù)可以訪問,這樣可以防止用戶從命令行中對圖形對象進(jìn)行修改,以防止誤操作;‘off’:不可訪問。2025/4/30Interruptible決定回調(diào)函數(shù)是否可以被隨后調(diào)用的回調(diào)函數(shù)中斷,有’on’和’off’兩個值可以設(shè)置Parent該對象的父對象的句柄Selected該對象是否被選中,可以設(shè)置為’on’或’off’SelectionHighlight定義對象是否使用可見方式表明被選中狀態(tài),可以設(shè)置為’on’(缺省值)或者’off’Tag用戶用來標(biāo)識對象的字符串Type對象的類型,是figure、axes、line或者text等UserData是一個矩陣,包含用戶要在對象中保存的數(shù)據(jù)。矩陣數(shù)據(jù)并不被對象本身使用UIContextMenu和對象相關(guān)聯(lián)的現(xiàn)場菜單句柄。當(dāng)在對象上點(diǎn)擊鼠標(biāo)右鍵時,將顯示出現(xiàn)場菜單Visible決定對象是否可見,值可以為’on’或者’off’續(xù)前表:2025/4/30MATLAB為所有對象都設(shè)置了缺省值。用戶在創(chuàng)建圖形對象時,如果沒有指定其屬性值,則MATLAB會使用對象的系統(tǒng)缺省屬性值來創(chuàng)建對象??梢栽诿畲翱谥惺褂胓et命令來查詢這些缺省的屬性值,所有缺省屬性值均以factory開頭,表示其“出廠”設(shè)置。【例】查詢出廠設(shè)置

>>get(0,'factory')

ans=

factoryFigureAlphamap:[1x64double]

factoryFigureBusyAction:'queue'

factoryFigureButtonDownFcn:''

factoryFigureClipping:'on'

factoryFigureCloseRequestFcn:'closereq'

factoryFigureColor:[000]

factoryFigureColormap:[64x3double]

……..2025/4/30

用戶不僅可以查詢當(dāng)前任意圖形對象的屬性值,而且可以設(shè)置對象的大多數(shù)屬性值(某些屬性被設(shè)置為“只讀”,用戶只能查詢,不能修改)。

屬性值只對對象的特定實(shí)例起作用,即修改對象的屬性值不會對同類對象、不同實(shí)例的屬性值產(chǎn)生影響。例如,修改坐標(biāo)軸1的刻度值,坐標(biāo)軸2的刻度值則不會受影響,等等。

由于是層次結(jié)構(gòu),所以某個對象的屬性改變時,會影響到這個結(jié)構(gòu)中它以下的對象。例如,如果使用鼠標(biāo)改變圖形窗口在電腦屏幕上的位置,線條和坐標(biāo)軸對象的位置也隨之改變。

有兩種方法可以用來修改對象的屬性值:一種是在創(chuàng)建對象的時候設(shè)置;另一種是在創(chuàng)建完成后,通過獲得對象的句柄,調(diào)用set函數(shù)來修改對象的屬性值。2025/4/30【例】查詢圖形對象的屬性值可以通過如下命令查詢當(dāng)前圖形對象的缺省屬性值。>>h=gcf;%取得當(dāng)前圖形窗口的句柄>>get(h)%取得當(dāng)前圖形窗口的缺省屬性值結(jié)果如下所示:Alphamap=[(1by64)doublearray]BackingStore=onCloseRequestFcn=closereq%關(guān)閉窗口時調(diào)用的回調(diào)函數(shù)Color=[0.80.80.8]%窗口的背景顏色Colormap=[(64by3)doublearray]CurrentAxes=[]%當(dāng)前坐標(biāo)軸,為[](空)表示還未創(chuàng)建坐標(biāo)軸CurrentCharacter=CurrentObject=[]CurrentPoint=[00]%鼠標(biāo)當(dāng)前的位置………………2025/4/30【例】修改窗口的顏色為藍(lán)色,去掉figure1標(biāo)識,并將窗口的名稱設(shè)置為“myfirstfigure”。>>h=gcf;%取得當(dāng)前圖形窗口的句柄

>>set(h,‘color’,[001]);%修改其背景顏色為藍(lán)色

>>set(h,‘numbertitle’,‘off’);%去掉figure的數(shù)字編號

>>set(h,‘name’,‘myfirstfigure’);%設(shè)置figure的名稱2025/4/30四、圖形對象的操作

每一種類型的圖形對象都有一個相應(yīng)的創(chuàng)建函數(shù),這個創(chuàng)建函數(shù)使用戶能夠創(chuàng)建這一類對象的一個實(shí)例。除了在“繪圖與可視化”這一章中提到的二維繪圖函數(shù)(如plot)、三維繪圖函數(shù)(如plot3)和特殊繪圖函數(shù)(如stem)等函數(shù)外,圖形窗口對象、坐標(biāo)軸、用戶控件、用戶菜單、工具條和現(xiàn)場菜單創(chuàng)建函數(shù)以及對句柄的操作函數(shù)列于下表中。1、圖形對象操作函數(shù)2025/4/30函數(shù)名稱功能描述figure創(chuàng)建圖形窗口axes創(chuàng)建坐標(biāo)軸line創(chuàng)建線條uicontrol創(chuàng)建用戶界面控件uimenu創(chuàng)建用戶界面菜單uicontextmenu創(chuàng)建圖形對象的右鍵彈出式菜單uitoolbar創(chuàng)建在圖形窗口頂部顯示的工具條uipushtool在工具條上創(chuàng)建下壓按鈕uitoggletool在工具條上創(chuàng)建開關(guān)按鈕uipanel在圖形窗口上創(chuàng)建面板對象uibuttongroup在圖形窗口上創(chuàng)建按鈕組對象2025/4/30set設(shè)置對象的屬性get獲取對象的屬性findobj根據(jù)對象的屬性值查找對象的句柄delete刪除對象gco獲取當(dāng)前鼠標(biāo)所點(diǎn)擊的對象的句柄gcbo獲取當(dāng)前回調(diào)函數(shù)對應(yīng)的對象的句柄gcf獲取當(dāng)前圖形窗口對象的句柄gca獲取當(dāng)前坐標(biāo)軸對象的句柄clf清空當(dāng)前圖形窗口上的對象cla清除當(dāng)前坐標(biāo)軸上的對象close關(guān)閉當(dāng)前窗口Copyobj拷貝圖形對象2025/4/30

gco、gcbo、gcf和gca是get函數(shù)的助記符,其含義如下:

(1)gco

回當(dāng)前圖形窗口對象的CurrentObject屬性值,相當(dāng)于get(gcf,’CurrentObject’);

(2)gcbo

返回根對象的CallbackObject屬性值,相當(dāng)于get(0,’CallbackObject’);

(3)gcf

返回根對象的CurrentFigure屬性值,相當(dāng)于get(0,’CurrentFigure’);

(4)gca

返回當(dāng)前圖形窗口對象的CurrentAxes屬性值,相當(dāng)于get(gcf,’CurrentAxes’)2、常用助記符3、常用操作函數(shù):set和get

在MATLAB中,有兩個基本命令用來處理圖形對象:get和set。通過使用這兩個命令,可以設(shè)置和修改指定對象的屬性值。

2025/4/30【例】利用set和get來設(shè)置和查詢圖形對象的屬性>>set(fh,'Pointer')%Pointer屬性標(biāo)識鼠標(biāo)指針的形狀,{arrow}表示默認(rèn)的指針形狀[crosshair|fullcrosshair|{arrow}|ibeam|watch|topl|topr|botl|botr|left|top|right|bottom|circle|cross|fleur|custom|hand](1)查看圖形窗口對象的大小和位置的度量單位%使用缺省的屬性創(chuàng)建一個圖形窗口對象>>fh=figure;>>get(fh,'units')%查看度量單位ans=pixels(2)改變窗口的大小和位置%將窗口的左下角移動到點(diǎn)(200,300)處,大小設(shè)置為400×300像素點(diǎn)>>set(fh,'Position',[200300400300]);可以看到,圖形窗口在屏幕上的位置和大小均發(fā)生了改變。(3)查看可以設(shè)置的鼠標(biāo)指針的形狀2025/4/30【例】圖形對象操作簡單示例程序程序運(yùn)行界面如下圖所示:2025/4/30示例程序中的幾點(diǎn)注意事項(xiàng):1.關(guān)于函數(shù)M文件代碼的起始部分有如下語句“function[]=ex5_4()”,此語句表明將該文件聲明為函數(shù)M文件,function是聲明函數(shù)M文件時必須使用的關(guān)鍵字,ex5_4為函數(shù)的名稱,()和[]內(nèi)分別包含函數(shù)的輸入和輸出參數(shù),為空表示函數(shù)不帶輸入和輸出參數(shù)。如果函數(shù)需要輸入和輸出參數(shù),可以這樣聲明:function[out1,out2,...]=ex5_4(in1,in2,...)函數(shù)的輸入和輸出參數(shù)的個數(shù)不受限制。2025/4/302.關(guān)于結(jié)構(gòu)變量S

程序中的變量S定義為結(jié)構(gòu)體,又稱為“句柄結(jié)構(gòu)”,該結(jié)構(gòu)體包含了界面上所有圖形對象的句柄,這樣做的目的有兩個:一是為了代碼的簡潔,二是便于各圖形對象的句柄在各回調(diào)函數(shù)之間的傳遞。這是編程時的習(xí)慣做法。S.fh、S.text、S.pop和S.axes是結(jié)構(gòu)體S的字段,分別保存圖形窗口對象的句柄、文本對象的句柄、彈出式菜單對象的句柄和坐標(biāo)軸對象的句柄。2025/4/303.彈出式菜單的Callback屬性

在MATLAB中,將圖形對象的Callback屬性設(shè)置為函數(shù)句柄的形式,可以將主函數(shù)和回調(diào)函數(shù)的代碼保存到同一個函數(shù)M文件中。每一個函數(shù)M文件都只有一個主函數(shù),這個主函數(shù)位于文件的開頭,其余函數(shù)都是子函數(shù)。在示例程序中,設(shè)置彈出式菜單的回調(diào)函數(shù)為mycallback,并把句柄結(jié)構(gòu)S作為參數(shù)傳遞給它,以方便在子函數(shù)中通過句柄結(jié)構(gòu)對界面上的圖形對象進(jìn)行控制。例如,可以使用set命令來改變線條對象的顏色屬性,等等。2025/4/304.圖形對象的Position屬性

figure、axes、text和popupmenu等圖形對象都有Position屬性,用來確定圖形對象的位置和大小。Position定義了一個矩形區(qū)域,來確定圖形對象的位置和大?。簉ect=[left,bottom,width,height]

left和bottom表示圖形對象矩形區(qū)域的左下角在其父對象中的坐標(biāo),figure的父對象是電腦屏幕(root對象),axes、text和popupmenu的父對象是figure。width和height確定了矩形區(qū)域的寬度和高度。2025/4/30下圖標(biāo)識了figure窗口在屏幕上的位置,其左下角相對于屏幕的左下角的位置矢量如圖中的紅色“—”型虛線所示;界面上的Edit控件相對于figure窗口的位置矢量如圖中的黑色“*”型虛線所示;文本框和坐標(biāo)軸的位置也在圖中做了標(biāo)注。2025/4/305.曲線的Color屬性

在MATLAB的幫助文件中,Line對象的Color屬性值為ColorSpec。ColorSpec指的是在MATLAB中定義顏色的三種方式:RGB三元素行向量;簡稱;全稱。RGB向量中個元素的取值在0~1之間,分別表示red(紅色)、green(綠色)和blue(藍(lán)色)所占的比重。MATLAB中有8中預(yù)定義的顏色,列于下表中。2025/4/30RGB值簡稱全稱含義[100]Rred紅色[010]Ggreen綠色[001]Bblue藍(lán)色[011]Ccyan青綠色[101]mmagenta紫紅色[110]yyellow黃色[111]wwhite白色[000]kblack黑色2025/4/306.使用propedit屬性編輯器編輯圖形對象的屬性

除了使用set和get命令來設(shè)置和查詢圖形對象的屬性外,MATLAB還提供了一個圖形用戶界面的屬性編輯器,利用它可方便地對圖形用戶界面上對象的屬性進(jìn)行設(shè)置修改。

在命令窗口中輸入下列命令,即可顯示屬性編輯器。>>propedit2025/4/30下圖是屬性編輯器的界面。FigureName是顯示在窗口標(biāo)題欄中的名稱;ShowFigureNumber如果被勾選,則在窗口的名稱前顯示窗口的編號,圖中的Figure2:ex5_4;Colormap表示圖形窗口使用的色圖矩陣,有13種預(yù)定義的色圖矩陣,此外,用戶可以定義自己的色圖矩陣;點(diǎn)擊MoreProperties...按鈕,可以打開Inspector窗口,用戶可以查看和修改更多的屬性值;ExportSetup按鈕可以導(dǎo)出設(shè)置好的figure窗口并可以保存為.fig、.bmp、.jpg等圖片文件。2025/4/30第二節(jié)圖形用戶界面的設(shè)計原則和步驟2025/4/301.簡單性一、圖形用戶界面設(shè)計原則設(shè)計界面時,應(yīng)力求簡潔、直接、清晰地體現(xiàn)出界面的功能和特征。只在界面上顯示最終的、最關(guān)鍵的、最重要的信息,以保持界面的整潔。要正確地使用圖形的表達(dá)能力。設(shè)計界面時要合理地采用圖形表示,濫用圖形表示有時會造成畫面混亂,反而不便于用戶使用。設(shè)計界面應(yīng)盡量減少窗口數(shù)目,力求避免在不同窗口之間進(jìn)行來回切換。2025/4/302.一致性

人機(jī)界面的一致性主要體現(xiàn)在輸入、輸出方面的一致性。具體是指在應(yīng)用程序的不同部分,甚至不同的應(yīng)用程序之間,具有相似的界面外觀和不具,相似的人機(jī)交互方式以及相似的信息顯示格式等。例如:凡是下拉菜單或者彈出式菜單都有同樣的結(jié)構(gòu)和操作方法;各種類型信息(包括結(jié)果信息、提示信息、錯誤信息、幫助信息等)都在確定的屏幕位置和以相似的格式顯示等。一致性原則有助于用戶學(xué)習(xí),減少用戶的學(xué)習(xí)量和記憶量,有助于用戶將局部的經(jīng)驗(yàn)知識推廣到其它的場合下應(yīng)用。2025/4/303.熟悉性

設(shè)計新的圖形界面時,應(yīng)盡量使用人們所熟悉的標(biāo)志和符號。用戶可能并不了解新界面的具體含義及操作方法,但完全可以根據(jù)自己所熟悉的標(biāo)志來摸索界面的使用。

4.系統(tǒng)要給用戶提供反饋信息

要通過圖形界面及時對用戶的操作作出反應(yīng),給出反饋信息,以便于用戶確定其操作是否正確,操作的結(jié)果是什么。如果執(zhí)行某個命令或功能需要耗費(fèi)較長的時間,需要給出操作完成剩余的時間等信息,便于用戶及時掌握程序運(yùn)行的進(jìn)度。同時,系統(tǒng)可以允許用戶中斷正在進(jìn)行的運(yùn)算。2025/4/305.用戶界面應(yīng)具有容錯能力

在用戶輸入、調(diào)試運(yùn)行程序時難免會出錯,此外,計算機(jī)的軟件或硬件系統(tǒng)也可能出錯。因此,用戶界面應(yīng)具有容錯能力,應(yīng)能及時給出出錯信息,出錯信息應(yīng)清楚、易理解。同時,用戶界面應(yīng)具有保護(hù)功能,防止因用戶的誤操作而破壞系統(tǒng)的運(yùn)行狀態(tài)和信息存儲。此外,圖形用戶界面應(yīng)提供幫助功能,便于用戶學(xué)習(xí)和使用系統(tǒng),等等。2025/4/301.確定對界面的要求和使用環(huán)境

二、圖形用戶界面設(shè)計步驟

一個圖形用戶界面的優(yōu)劣,很大程度上取決于用戶的使用評價。因此,在系統(tǒng)開發(fā)的最初階段,尤其要重視系統(tǒng)界面部分的用戶需求,了解用戶的技能和經(jīng)驗(yàn),綜合考慮系統(tǒng)直接的或潛在的用戶需求,同時要考慮圖形用戶界面運(yùn)行所必需的軟、硬件環(huán)境。2025/4/302.分析界面功能,明確設(shè)計任務(wù)

在設(shè)計界面之前,需要仔細(xì)考慮界面的外觀和要完成的功能??梢試@“信息輸入-信息處理-信息輸出”這樣一條主線,理清哪些信息或參數(shù)是需要通過圖形界面輸入,以何種方式輸入;在程序運(yùn)行過程中會產(chǎn)生哪些中間信息,哪些中間信息是有必要呈現(xiàn)給用戶的;程序運(yùn)行結(jié)束后會產(chǎn)生哪些結(jié)果,這些結(jié)果以何種方式在界面上體現(xiàn)。…2025/4/303.建立界面模型

根據(jù)系統(tǒng)的功能以及輸入、輸出信息,選擇合適的控件,對界面進(jìn)行合理的布局,構(gòu)建圖形用戶界面草圖,并反復(fù)推敲、修改,直至獲得滿意的效果。

4.根據(jù)界面模型完成圖形界面的開發(fā)

根據(jù)確定的界面模型,選擇合適的界面開發(fā)方法,逐步細(xì)化完成界面的開發(fā)。2025/4/30第三節(jié)開發(fā)圖形用戶界面的方法

2025/4/30兩種開發(fā)圖形用戶界面程序的方法:一是以基本的MATLAB程序開發(fā)為主,直接編寫M文件;二是以鼠標(biāo)為主通過MATLAB提供的GUIDE集成開發(fā)環(huán)境進(jìn)行。2025/4/301.簡介

一、直接編寫M文件的方法該方法以句柄圖形(HandleGraphics)的概念為基礎(chǔ),依據(jù)前面所講的圖形對象的相關(guān)知識,通過編寫MATLAB代碼,調(diào)用圖形對象的操作函數(shù)來創(chuàng)建、操作圖形對象,設(shè)置圖形對象的有關(guān)屬性,定義有關(guān)圖形對象的相關(guān)回調(diào)函數(shù),開發(fā)出滿足要求的圖形用戶界面。2.特點(diǎn)

以編寫純代碼的形式進(jìn)行的,需要用戶熟練掌握圖形對象的相關(guān)知識,需要較多的編程技巧。

2025/4/30過程比較明晰,代碼編寫較為靈活,代碼執(zhí)行效率高,整個程序只包含一個M文件。

用戶需要事先對界面的格式及布局進(jìn)行細(xì)致的規(guī)劃,尤其是要準(zhǔn)確計算各圖形對象在界面上的位置,以便正確確定其Position屬性的值。可能需要多次修改代碼以修改對象的屬性值,以便得到滿意的圖形界面效果,需要占用較多的開發(fā)時間。

2025/4/301.簡介

二、利用MATLAB提供的GUIDE界面開發(fā)工具

GUIDE(GraphicalUserInterfaceDevelopmentEnvironment)是MATLAB提供的一個專門用于GUI程序設(shè)計的快速開發(fā)環(huán)境。

GUIDE是一個界面設(shè)計工具集,MATLAB將所有GUI支持的用戶控件都集成在這個開發(fā)環(huán)境中,并提供界面外觀、屬性和事件響應(yīng)方式的設(shè)置方法。用戶不需要編寫任何代碼,即可以通過鼠標(biāo)的簡單拖拽就能迅速地產(chǎn)生各種GUI控件,并可以根據(jù)要求方便地修改它們的外形、大小、顏色等屬性,從而幫助用戶方便地設(shè)計出各種符合要求的圖形用戶界面。

GUIDE界面如下圖所示。2025/4/30MATLABR2008a的GUIDE界面

2025/4/302.生成的文件類型

(1)FIG文件

該文件包括GUI圖形窗口及其上所有控件的完整的描述,包括所有對象的屬性值。FIG文件是一個二進(jìn)制文件,在用戶打開GUI時,MATLAB自動讀取FIG文件來重新構(gòu)造圖形窗口及其所有控件。所有對象的屬性都被設(shè)置為圖形窗口創(chuàng)建時保存的屬性。可以使用open、openfig和hgload命令來打來后綴為.fig的FIG文件。2025/4/30(2)M文件

該文件包括GUI設(shè)計、控制函數(shù)以及定義為子函數(shù)的用戶控件回調(diào)函數(shù),主要用于控制GUI打開時的各種特征。該M文件的內(nèi)容包括兩部分:GUI初始化和控件的回調(diào)函數(shù)。當(dāng)用戶與GUI進(jìn)行交互操作時,程序?qū)⒄{(diào)用相應(yīng)的回調(diào)函數(shù)來處理用戶的操作。2025/4/303.特點(diǎn)

同直接編寫M文件的方法相比,該方法有如下優(yōu)點(diǎn):開發(fā)圖形界面直觀、便捷、所見即所得,自動生成的M文件中包含程序所需要的一些有用的函數(shù)代碼(如初始化函數(shù)OpeningFcn和輸出函數(shù)OutputFcn等),無需用戶自行編寫。可以使用M文件生成的有效方法來管理圖形對象句柄(即句柄結(jié)構(gòu)handles),并執(zhí)行回調(diào)函數(shù)子程序??梢宰詣硬迦牖卣{(diào)函數(shù)的原型,用戶只需要編寫回調(diào)函數(shù)的具體實(shí)現(xiàn)代碼即可。2025/4/304.開發(fā)步驟

利用GUIDE工具來實(shí)現(xiàn)一個圖形用戶界面包括以下兩項(xiàng)工作:GUI界面設(shè)計和GUI控件編程。整個GUI的實(shí)現(xiàn)過程可以分為如下幾步:根據(jù)需要設(shè)置GUIDE開發(fā)環(huán)境。通過菜單File->Preferences…菜單項(xiàng)來完成。使用界面設(shè)計編輯器進(jìn)行GUI界面設(shè)計。編寫用戶GUI控件的回調(diào)函數(shù)代碼。2025/4/30第四節(jié)直接編寫M文件開發(fā)圖形用戶界面

2025/4/30一、

M文件的類型1、兩種M文件腳本文件(MATLABscripts)和函數(shù)文件(MATLABfunctions)。2、兩種M文件的區(qū)別

腳本M文件不包含函數(shù)聲明行,沒有輸入?yún)?shù)和輸出參數(shù);函數(shù)M文件是以函數(shù)聲明行“function...”作為開始的,可以包括輸入?yún)?shù)和輸出參數(shù)。

腳本M文件中的變量全部存在于基本工作空間(BaseWorkspace)中,用戶可以在命令窗口中直接訪問基本工作空間中的變量;在函數(shù)M文件中使用的變量的作用域是局部的,只局限于函數(shù)空間(FunctionWorkspace)內(nèi)部,用戶不能在命令窗口中直接訪問函數(shù)空間中的變量;MATLAB編譯器V4.3(MATLAB7.1)版本及其之前的版本只能編譯(使用mcc命令)函數(shù)M文件,不能編譯腳本M文件。2025/4/303、將腳本M文件轉(zhuǎn)換為函數(shù)M文件若將腳本M文件轉(zhuǎn)換為函數(shù)M文件,只需在文件的起始處添加關(guān)鍵字function,并指定函數(shù)的名稱(例如myfunc)即可。函數(shù)M文件運(yùn)行后,在命令窗口中仍然顯示變量t的數(shù)值,但在基本工作空間中就不會看到變量m和t了?!纠繉⒛_本M文件轉(zhuǎn)換為函數(shù)M文件(1)腳本M文件的代碼:m=magic(4);%產(chǎn)生把4x4的魔方矩陣t=m.^3;%將m中的每個元素求三次方disp(t);%在命令窗口中顯示t的值(2)轉(zhuǎn)換后的M文件見ex54_1.m,其代碼為:%函數(shù)M文件,不包含輸入?yún)?shù)和輸出參數(shù)functionmyfuncm=magic(4);%產(chǎn)生把4x4的魔方矩陣t=m.^3;%將m中的每個元素求三次方disp(t);%在命令窗口中顯示t的值2025/4/30二、使用腳本M文件編寫的GUI程序%創(chuàng)建界面窗口,不包含工具條h0=figure('toolbar','none',...'position',[200150450250],...'name','ex54_2',...'numbertitle','off');%在窗口中繪制正弦曲線x=0:0.5:2*pi;y=sin(x);h=plot(x,y);gridon%創(chuàng)建靜態(tài)文本控件hm=uicontrol(h0,'style','text',...'string',...'繪圖函數(shù)',...'position',[3801805020]);%創(chuàng)建彈出式菜單控件hm=uicontrol(h0,'style','popupmenu',...'string',...'sin(x)|cos(x)|sin(x)+cos(x)',...'position',[3801505020]);%設(shè)置彈出式菜單的第一項(xiàng)為默認(rèn)選項(xiàng)set(hm,'value',1)2025/4/30%定義彈出式菜單的Callback,為字符數(shù)組my_callback=[...'v=get(hm,''value'');,',...'switchv,',...'case1,',...'delete(h),',...'y=sin(x);,',...'h=plot(x,y);,',...'gridon,',...'case2,',...'delete(h),',...'y=cos(x);,',...'h=plot(x,y);,',...'gridon,',...'case3,',...'delete(h),',...'y=sin(x)+cos(x);,',...'h=plot(x,y);,',...'gridon,',...'end'];%設(shè)置彈出式菜單的callback屬性值set(hm,'callback',my_callback);%設(shè)置坐標(biāo)軸的位置和大小,坐標(biāo)軸對象的units屬性缺省值為normalizedset(gca,'position',[0.20.20.60.6]);2025/4/302025/4/30三、根對象root根對象是與計算機(jī)屏幕相對應(yīng)的圖形對象。只有一個根對象,根對象沒有父對象,根對象的子對象是圖形窗口對象。根對象的句柄值為0,在MATLAB中可以通過set和get來設(shè)置和獲取根對象的一些屬性。當(dāng)用戶啟動MATLAB時,根對象就存在了。因此,根對象不需要用戶來創(chuàng)建,用戶也不能銷毀根對象。1、根對象的性質(zhì)2025/4/302、根對象常用屬性和方法屬性和方法名稱屬性描述CallbackObject只讀。包含正在執(zhí)行的回調(diào)函數(shù)的對象的句柄。如果沒有回調(diào)函數(shù)在執(zhí)行,則其值為[](空)Children包含所有屬性HandleVisibility為on的子對象的句柄CommandWindowSize只讀。包含命令窗口的尺寸,如[13839]CurrentFigure當(dāng)前圖形對象的句柄。如果不存在當(dāng)前圖像對象,則返回[](空)Diary允許用戶將命令窗口所有的鍵盤輸入以及大部分輸出內(nèi)容保存到日記文件中。值可以取on或off(缺省值)DiaryFile日記文件的名稱。缺省名稱為DiaryCreateFcn創(chuàng)建圖形對象時執(zhí)行的回調(diào)函數(shù),常用缺省值Echo當(dāng)執(zhí)行腳本M文件時,是否在命令窗口中顯示文件的每一行內(nèi)容。值可以取on或off(缺省值)ErrorMessage其值為MATLAB最近一次錯誤信息的字符串FixedWidthFontName當(dāng)axes、text和uicontrol對象Format控制命令窗口中數(shù)字的顯示格式??梢赃x擇的值有:short|long|shortE|longE|shortG|longG|hex|bank|+|rational|debug|shortEng|longEng,缺省值為shortEFormatSpacing其值為控制MATLAB命令窗口中輸出內(nèi)容的行間隔的字符串,可以為loose(缺省值)和compactMonitorPositions包含第一顯示器和第二顯示器的尺寸2025/4/30續(xù)前表:More控制命令窗口中的內(nèi)容的多屏顯示Parent根對象沒有父對象PointerLocation鼠標(biāo)指針相對于屏幕左下角的位置,以像素(pixels)為單位PointerWindow鼠標(biāo)指針?biāo)诘膱D形窗口的句柄,如果鼠標(biāo)不在任何圖形窗口中,則其值為0ScreenDepth只讀。顯示器的顏色深度,即每個像素多少位ScreenPixelsPerInch顯示器的分辨率,即每英寸代表多少像素ScreenSize只讀。由四個元素組成的屏幕位置和尺寸向量ShowHiddenHandles控制所有圖形對象的句柄的可訪問性,使各自的HandleVisibility屬性失效,其值為on和off(缺省值)Tag用戶設(shè)置的用來標(biāo)識根對象的字符串。(其實(shí)用戶可以不用設(shè)置其tag屬性,因?yàn)楦鶎ο蟮木浔倿?,可以方便使用)Type對象的類型,其值為rootUnits大小和位置的度量單位,可選用下列單位:pixels(標(biāo)準(zhǔn))

屏幕像素normalized屏幕寬度和高度歸一化處理inches英寸centimeters厘米points打印機(jī)的點(diǎn),等于0.353毫米characters字符UserData用戶要在根對象中保存的數(shù)據(jù)Visible決定對象是否可見,值可以為’on’或者’off’2025/4/30BusyAction、ButtonDownFcn、Clipping、CreateFcn、DeleteFcn、HandleVisibility、HitTest、Interruptible、Selected、SelectionHighlight、UicontextMenu、Visible。以下屬性對根對象是不起作用的:2025/4/30【例1】設(shè)置命令窗口中數(shù)字的顯示格式

3、根對象的操作方法舉例%設(shè)置命令窗口中數(shù)字的顯示格式為有理式rational>>set(0,'Format','rational')%或者使用命令formatrational>>a=133/444a=133/444%設(shè)置命令窗口中數(shù)字的顯示格式為short>>set(0,'format','short')>>aa=0.29952025/4/30【例2】查詢屏幕尺寸和修改度量單位

>>get(0,'units')%查詢屏幕尺寸的度量單位ans=pixels>>get(0,'screensize')%獲取以像素為單位的屏幕尺寸ans=111280800>>set(0,'units','inch')%設(shè)置屏幕尺寸的度量單位為英寸>>get(0,'screensize')%獲取以英寸為單位的屏幕尺寸ans=0013.33338.3333>>get(0,'ScreenPixelsPerInch')%查詢屏幕分辨率ans=962025/4/30【例3】設(shè)置命令窗口中輸出內(nèi)容的行間隔>>get(0,‘FormatSpacing’)%屬性值為loose,行與行之間有間隔ans=loose>>set(0,'FormatSpacing','compact')>>get(0,'FormatSpacing')%屬性值為compact,行與行之間沒有間隔ans=compact2025/4/30【例4】控制命令窗口內(nèi)容的分屏顯示如果在命令窗口中顯示的內(nèi)容超出命令窗口的范圍,用戶可以設(shè)置根對象的more屬性值來實(shí)現(xiàn)分屏顯示。>>set(0,'more','on')

%或者調(diào)用命令moreon>>set(0) CurrentFigure Diary:[on|off] DiaryFile Echo:[on|off] FixedWidthFontName Format:[short|long|shortE|longE|shortG|longG|hex|bank|+|rational|debug|shortEng|longEng] FormatSpacing:[loose|compact] Language More:[on|off]--more--

用戶可以按Enter鍵實(shí)現(xiàn)逐行滾動顯示,或按空格鍵實(shí)現(xiàn)逐屏滾動顯示。2025/4/30四、圖形窗口對象figure圖形窗口對象就是計算機(jī)屏幕上的一個圖形窗口,它的父對象是計算機(jī)屏幕,即root對象。因此,圖形窗口對象繼承了root對象的很多屬性。屬性可以在圖形窗口對象創(chuàng)建時修改,也可以通過set命令來修改。1、圖形窗口對象的性質(zhì)2、圖像窗口對象常用屬性和方法

屬性名稱屬性描述BeingDeleted指示窗口對象是否正被刪除。如果窗口對象的刪除回調(diào)函數(shù)(見DeleteFcn)被調(diào)用,則MATLAB自動設(shè)置該屬性為on,表明窗口正在被刪除。off是其默認(rèn)屬性值CloseRequestFcn圖形窗口關(guān)閉時執(zhí)行的回調(diào)函數(shù),缺省為closereq2025/4/30續(xù)前表:

Color圖形窗口的背景顏色,見ColorSpecColormap供曲面、圖像和補(bǔ)片對象使用的色圖矩陣CurrentAxes正在用來繪圖的當(dāng)前坐標(biāo)軸的句柄,見gcaCurrentCharacter包含在圖形窗口中最后一個按下的鍵盤字符鍵CurrentObject包含在圖形窗口中鼠標(biāo)選中的最后一個對象的句柄,見gcoCurrentPoint鼠標(biāo)最后一次按下時指針的位置,格式為[xy]DockControls是否允許圖形窗口??康組ATLAB桌面上,值為on(缺?。┗騩ffFileNameGUI的FIG文件名,用來保存GUI的布局信息IntegerHandle控制句柄是以整數(shù)值還是浮點(diǎn)數(shù)值來標(biāo)識,值為on(缺?。┗騩ffKeyPressFcn在當(dāng)前窗口中按下鍵盤按鍵時的回調(diào)函數(shù),用來處理鍵盤輸入KeyReleaseFcn在當(dāng)前窗口中釋放鍵盤按鍵時的回調(diào)函數(shù),用來處理鍵盤輸入MenuBar控制是否在圖形窗口的頂部顯示MATLAB菜單,值為none(不顯示菜單)或figure(缺省,顯示菜單)Name圖形窗口的標(biāo)題,缺省為空NextPlot在圖形窗口中新圖的繪制方式,其值為:new:

創(chuàng)建新的圖形窗口或在指定的其它窗口中顯示圖形add:

(缺省值)在當(dāng)前圖形窗口中顯示圖形replace:在繪圖前,將除位置屬性外的所有其它圖形對象的屬性設(shè)置為缺省值,并刪除所有子對象(相當(dāng)于clfreset)replacechildren:刪除所有子對象,但不重置窗口對象(相當(dāng)于clf)NumberTitle在圖形窗口的標(biāo)題中加上圖形編號,如figure1、figure2、…等。Pointer在圖形窗口中,鼠標(biāo)指針的形狀,缺省為arrow。其值可以為下列之一:crosshair|{arrow}|watch|topl|topr|botl|botr|circle|cross|fleur|left|right|top|bottom|fullcrosshair|ibeam|customPointerShapeCData16×16的矩陣,表示用戶自定義的鼠標(biāo)指針形狀2025/4/30續(xù)前表:

Position圖形窗口在屏幕上的位置和大小,其值為[leftbottomwidthheight]Units圖形窗口位置和大小屬性值的度量單位。其值可以為:inches、centimeters、normalized(缺省值)、points、pixels和characters,見root屬性。WindowStyle圖形窗口的形式,其值可以為:normal:

(缺省值)modal:

所有的鼠標(biāo)或鍵盤輸入都被限制在圖形窗口內(nèi)docked:圖形窗口??康組ATLAB桌面上Resize決定是否允許用戶用鼠標(biāo)拖動窗口的右下角以改變大小,其值為on(缺省值)或offResizeFcn當(dāng)窗口改變大小時調(diào)用的回調(diào)函數(shù)SelectionType確定鼠標(biāo)左右鍵的單擊或雙擊選擇,其值為:normal:(缺省值)表示單擊鼠標(biāo)左鍵extend:

shift鍵+鼠標(biāo)左鍵或中間鍵alternate:control鍵+鼠標(biāo)左鍵或右鍵open:雙擊鼠標(biāo)左鍵ToolBar控制是否在圖形窗口顯示工具條。其值為:none:不顯示工具條auto:顯示工具條,但當(dāng)在窗口中添加圖形用戶控件(uicontrol)時移除工具條figure:始終顯示工具條UIContextMenu與圖像窗口相聯(lián)的現(xiàn)場菜單的句柄WindowButtonDownFcn在圖形窗口中按下鼠標(biāo)鍵時執(zhí)行的回調(diào)函數(shù)WindowButtonMotionFcn鼠標(biāo)指針在圖形窗口中移動時執(zhí)行的回調(diào)函數(shù)WindowButtonUpFcn在圖形窗口內(nèi)釋放鼠標(biāo)鍵時執(zhí)行的回調(diào)函數(shù)2025/4/303、圖形窗口對象的操作舉例【例】圖形窗口對象的操作方法創(chuàng)建一圖形窗口,去掉數(shù)字標(biāo)題,將其標(biāo)題改為“examplewindow”,隱去圖形窗口的標(biāo)準(zhǔn)菜單欄,顯示圖形窗口的標(biāo)準(zhǔn)工具條,并將圖形窗口對象的units屬性設(shè)置為normalized,并設(shè)置其位置和大小。functionmygui%使用缺省屬性值創(chuàng)建圖形窗口hf=figure;%設(shè)置圖形窗口的部分屬性值set(hf,'toolbar','figure','menubar','none','numbertitle','off',...'name','examplewindow','units','normalized','position',[0.30.40.60.5]);2025/4/302025/4/30五、坐標(biāo)軸對象axes坐標(biāo)軸對象可以在圖形窗口中定義繪圖的區(qū)域,其父對象是圖形窗口對象,而線條、圖像、補(bǔ)片和文本對象等是它的子對象。在同一個圖形窗口對象中可以有多個坐標(biāo)軸對象。1、坐標(biāo)軸對象的性質(zhì)2、坐標(biāo)軸對象的常用屬性和方法2025/4/30續(xù)前表:FontAngle指定坐標(biāo)軸文本字體的傾斜角度,其值可以為normal(缺省值)、italic和

oblique。italic和

oblique指定了傾斜的字體FontName坐標(biāo)軸文本所使用的字體FontSize指定字體的大小。使用FontUnits中的單位FontUnitsFontSize中使用的字體大小單位,其值可以為:inches、centimeters、normalized、points(缺省值)和pixelsFontWeight坐標(biāo)軸文本加黑。其值可以為:normal(缺省值)、light、bold和demiGridLineStyle坐標(biāo)軸中的柵格所使用的線型,可以為:“-”、“—”、“:”、“-.”和“none”,缺省值為“:”LineWidthx、y和z坐標(biāo)軸的寬度,缺省值為0.5點(diǎn),1點(diǎn)=1/72英寸NextPlot指定在坐標(biāo)軸內(nèi)繪制新圖形的方式,其值為:“add”

使用已存在的坐標(biāo)軸來繪制圖形“replace”

(缺省值)刪除坐標(biāo)軸的所有子對象,并重新設(shè)置除Position屬性外的所有屬性值,等同于clareset命令“replacechildren”

刪除所有子對象,但不重新設(shè)置坐標(biāo)軸的屬性值,等同于cla命令2025/4/30續(xù)前表:Position指定坐標(biāo)軸在圖形窗口中的位置和大小,其值為位置向量[leftbottomwidthheight],left和bottom表示坐標(biāo)軸左下角相對于圖形窗口左下角的位置,width和height表示坐標(biāo)軸的寬度和高度Title指定坐標(biāo)軸的標(biāo)題文本Units坐標(biāo)軸位置和大小屬性值的度量單位。見figure屬性XAxisLocationx軸的刻度標(biāo)記和x軸標(biāo)簽的位置,其值可以為:top和bottom(缺省值)YAxisLocationy軸的刻度標(biāo)記和y軸標(biāo)簽的位置,其值可以為:right和left(缺省值)XColor\YColor\ZColorx軸、y軸和z軸的顏色。在x、y和z軸防線的刻度標(biāo)記、數(shù)字文本和柵格線都是這種顏色XGrid\YGrid\ZGrid是否在x軸、y軸和z軸方向繪制柵格線,其值為on或off(缺省值)XLabel\YLabel\ZLabelx軸、y軸和z軸的標(biāo)簽XLim\YLim\ZLim設(shè)置x軸、y軸和z軸的最大和最小值XTick\YTick\ZTick指定x軸、y軸和z軸的刻度標(biāo)記,為數(shù)字XTickLabel\YTickLabel\ZTickLabel指定x軸、y軸和z軸的刻度標(biāo)記,為數(shù)字文本字符串2025/4/303、坐標(biāo)軸對象的操作舉例在圖形窗口中創(chuàng)建坐標(biāo)軸,并在坐標(biāo)軸中繪制曲線。%創(chuàng)建坐標(biāo)軸對象haxes=axes('parent',hf,'position',[0.10.10.50.8]);%初始化繪圖數(shù)據(jù)x=0:pi/50:2*pi;y=sin(x);%指定當(dāng)前坐標(biāo)軸axes(haxes);%繪制圖形plot(x,y,'b*');%設(shè)置坐標(biāo)軸的文本為傾斜,x軸的顏色為紅色set(gca,'fontangle','italic','xcolor',[100]);%打開柵格gridon%給坐標(biāo)軸對象添加標(biāo)題title('我建立的第一個坐標(biāo)軸');%給x和y軸添加標(biāo)簽xlabel('x坐標(biāo)軸');ylabel('y坐標(biāo)軸');2025/4/302025/4/30六、用戶界面控件對象下壓按鈕(pushbutton):通過鼠標(biāo)點(diǎn)擊按鈕可以實(shí)現(xiàn)按鈕的壓下,并調(diào)用相應(yīng)的回調(diào)函數(shù)來完成某項(xiàng)事務(wù)。雙位按鈕(togglebutton):點(diǎn)擊按鈕將使按鈕保持按下或彈起狀態(tài),兩種情況下可分別調(diào)用不同的回調(diào)函數(shù)來完成不同的事務(wù)。單選按鈕(radiobutton):單選按鈕通常以組為單位,一組單選按鈕之間是一種互斥的關(guān)系,任一時刻一組單選按鈕只能有一個按鈕有效。復(fù)選框(checkbox):復(fù)選框通常也以組為單位,但某一時刻多個復(fù)選框可以同時有效。編輯框(edit):用戶可以在編輯框中輸入文本數(shù)據(jù)。編輯框的屬性Max和Min用來控制是否允許多行輸入,如果Max-Min>1,則可以在編輯框中輸入多行內(nèi)容。此外,用戶也可以利用編輯框來顯示程序運(yùn)行的結(jié)果。1、MATLAB所支持的用戶界面控件類型(R2008a)2025/4/30靜態(tài)文本(text):通常作為其它控件的標(biāo)簽,用戶不能通過靜態(tài)文本來輸入程序運(yùn)行的參數(shù)或調(diào)用相應(yīng)的回調(diào)函數(shù)?;瑒訔l(slider):用戶可以通過滑動條來改變指定范圍內(nèi)的數(shù)值輸入,滑動條的位置代表用戶輸入的數(shù)值。列表框(listbox):列表框顯示由其string屬性定義的一組選項(xiàng),用戶可以選擇其中的一項(xiàng)或多項(xiàng)。列表框的屬性Max和Min用來控制選擇模式:如果Max-Min>1,則允許多項(xiàng)選擇;如果Max-Min≤1,則只允許單項(xiàng)選擇。彈出式菜單(popupmenu):彈出式菜單可以打開并顯示一個由其string屬性定義的一組選項(xiàng),彈出式菜單不像列表框那樣有滑動條,它減少了對圖形窗口空間的占用??蚣埽╢rame):框架是圖形窗口中的一個可見的、封閉的矩形區(qū)域,它把一組互相關(guān)聯(lián)的控件(例如一組單選按鈕等)組合在一起,使得用戶界面更容易理解。框架沒有相關(guān)聯(lián)的回調(diào)函數(shù)。目前,框架一般由面板(uipanel)和組合框(uibuttongroup)來代替。

2025/4/302、用戶界面控件常用屬性和方法屬性名稱屬性描述BackgroundColor是一個RGB三元數(shù)組或MATLAB預(yù)定義的顏色,用于設(shè)置對象的背景顏色Callback用戶激活控件時運(yùn)行的回調(diào)函數(shù)。但用戶不可交互控制frame和text的回調(diào)函數(shù)CData指定一個RGB值的m×n×3的矩陣,表示在pushbutton或togglebutton上顯示的真彩圖像Enable決定當(dāng)用戶用鼠標(biāo)點(diǎn)擊控件時,控件是否可用及其動作,其值為:on:(缺省值)表示控件可用,鼠標(biāo)點(diǎn)擊時執(zhí)行其Callbackinactive:控件處于非活動狀態(tài),鼠標(biāo)點(diǎn)擊時不執(zhí)行其Callback,而是執(zhí)行其ButtonDownFcnoff:控件標(biāo)題變灰,鼠標(biāo)點(diǎn)擊時執(zhí)行其ButtonDownFcnForegroundColor是一個RGB三元數(shù)組或MATLAB預(yù)定義的顏色,用于設(shè)置其文本String的顏色HorizontalAlignment對象的文本String的水平排列方式,其值為left、center(缺省值)或rightKeyPressFcn當(dāng)控件有輸入焦點(diǎn)時,按下鍵盤按鍵執(zhí)行的回調(diào)函數(shù)ListboxTop只對列表框控件有效,表示將列表框中的哪一項(xiàng)放在列表框的最上面Max指定控件的Value屬性的最大值,取決于控件的類型:togglebutton、radiobutton和checkbox:當(dāng)控件被選中時,其Value值設(shè)置為Maxslider:滑動條可選擇的最大值,Max要大于Min,Max的缺省值為1edit:當(dāng)Max-Min>1時,文本框接受多行輸入;當(dāng)Max-Min≤1時,文本框接受單行輸入listbox:當(dāng)Max-Min>1時,可以選擇列表框的多個選項(xiàng);當(dāng)Max-Min≤1時,只能選擇列表框的單個選項(xiàng)popupmenu、pushbutton和text控件不使用這個屬性2025/4/30續(xù)前表:Min指定控件的Value屬性的最小值,取決于控件的類型:togglebutton、radiobutton和checkbox:當(dāng)控件未被選中時,其Value值設(shè)置為Minslider:滑動條可選擇的最小值,Min值要小于Max的值,Min的缺省值為0edit:當(dāng)Max-Min>1時,文本框接受多行輸入;當(dāng)Max-Min≤1時,文本框接受單行輸入listbox:當(dāng)Max-Min>1時,可以選擇列表框的多個選項(xiàng);當(dāng)Max-Min≤1時,只能選擇列表框的單個選項(xiàng)popupmenu、pushbutton和text控件不使用這個屬性Position位置向量[leftbottomwidthheight],表示控件在圖形窗口中的位置String控件的標(biāo)簽、列表框的選項(xiàng)、彈出式菜單的選項(xiàng)Style指定控件的類型。其值可以為pushbutton(缺省值)、

togglebutton、radiobutton、checkbox、edit、text、

slider、frame、

listbox或

popupmenuSliderStepslider控件的屬性,其值為[min_stepmax_step],表示每次滑動條移動所改變的最小值和最大值TooltipString用戶將鼠標(biāo)移動到控件上時顯示的提示字符串Units位置屬性值的單位,見root對象Value不同類型的對象,其Value屬性值不同:togglebutton、radiobutton和checkbox:見Max和Minslider:滑動條的當(dāng)前值popupmenu、listbox:表示哪些選項(xiàng)被選中edit、pushbutton和text的Value屬性無效Visible確定控件是否可見,其值可以為:on:(缺省值)表示控件可見off:表示控件不可見2025/4/303、用戶界面控件編程要點(diǎn)(1)如何設(shè)置控件的相關(guān)事件的回調(diào)函數(shù)每個用戶界面控件都有若干個回調(diào)函數(shù),用來對用戶觸發(fā)的不同事件做出響應(yīng)。Callback、ButtonDownFcn和KeyPressFcn等分別表示當(dāng)用戶選中控件、在控件上點(diǎn)擊鼠標(biāo)和按下鍵盤按鍵時調(diào)用的回調(diào)函數(shù)。如果用戶需要處理這些事件,就需要設(shè)置和定義這些回調(diào)函數(shù)。因此,用戶首先需要了解定義這些回調(diào)函數(shù)需要遵循的語法規(guī)則。如果回調(diào)函數(shù)執(zhí)行的語句較少,可在創(chuàng)建控件時直接將語句賦值給其回調(diào)函數(shù)【例】定義下壓按鈕pushbutton的Callback屬性,將要執(zhí)行的語句用“[]”和“'”符號括起來,作為Callback的屬性值。[]內(nèi)的每條命令必須用兩個單引號“’”括起來,每條語句之間必須用逗號“,”隔開。(見ex54_8.m)2025/4/30functionDefineCallback%創(chuàng)建圖形窗口對象hFig=figure('units','normalize',...'position',[0.40.40.30.2]);%創(chuàng)建下壓按鈕對象,設(shè)置其Callback屬性uicontrol('parent',hFig,...'style','pushbutton',...'String','ExecuteCallback',...'units','normalize',...'position',[0.40.40.30.2],...'callback',['figure;',...'x=0:pi/20:2*pi;',...'y=sin(x);',...'plot(x,y);']);運(yùn)行效果圖:程序代碼:2025/4/30如果事件的處理較復(fù)雜,執(zhí)行的語句較多,可以將控件的回調(diào)函數(shù)的代碼寫到單獨(dú)的函數(shù)內(nèi)在這種情況下,MATLAB對定義回調(diào)函數(shù)有嚴(yán)格的語法規(guī)則,用戶必須按照這些規(guī)則來定義回調(diào)函數(shù)。定義回調(diào)函數(shù)的語法規(guī)則如下表所列,表中內(nèi)容是以定義pushbutton的Callback為例。如何設(shè)置對象的Callback屬性如何定義回調(diào)函數(shù)set(hObject,'Callback','myfile')functionmyfileset(hObject,'Callback',@myfile)functionmyfile(obj,event)set(hObject,'Callback',{'myfile',5,6})functionmyfile(obj,event,arg1,arg2)set(hObject,'Callback',{@myfile,5,6})functionmyfile(obj,event,arg1,arg2)2025/4/30在第一種情況下,回調(diào)函數(shù)沒有輸入?yún)?shù),回調(diào)函數(shù)必須保存成單獨(dú)的M文件。在第二種情況下,對象hObject的Callback屬性設(shè)置為函數(shù)句柄的形式。這種情況下,回調(diào)函數(shù)myfile必須帶兩個參數(shù):obj表示調(diào)用該回調(diào)函數(shù)的對象的句柄,如pushbutton的句柄;event是個結(jié)構(gòu)體,其中包含了事件的信息。這時的回調(diào)函數(shù)可以是單獨(dú)的函數(shù)M文件,也可以寫在主函數(shù)M文件內(nèi)。在第三種情況下,對象hObject的Callback屬性設(shè)置為{'myfile',5,6},回調(diào)函數(shù)不僅必須帶obj和event兩個參數(shù),而且還包含了用戶需要傳遞的其它參數(shù)。其中,用戶傳遞的參數(shù)的個數(shù)不受限制。這時,回調(diào)函數(shù)也必須保存成單獨(dú)的M文件。在第四種情況下,對象hObject的Callback屬性設(shè)置為{@myfile,5,6},回調(diào)函數(shù)不僅必須帶obj和event兩個參數(shù),而且還包含了用戶需要傳遞的其它參數(shù)。其中,用戶傳遞的參數(shù)的個數(shù)不受限制。這時的回調(diào)函數(shù)可以是單獨(dú)的函數(shù)M文件,也可以寫在主函數(shù)M文件內(nèi)。【說明】2025/4/30%定義主函數(shù)functionDefineCallback%創(chuàng)建圖形窗口對象hFig=figure('units','normalize',...'position',[0.40.40.30.2]);%創(chuàng)建下壓按鈕對象,設(shè)置其Callback屬性hPush=uicontrol('parent',hFig,...'style','pushbutton',...'String','ExecuteCallback',...'units','normalize',...'position',[0.40.40.30.2]);【例】將Callback編寫成單獨(dú)的函數(shù)set(hPush,'callback',@ex54_9_Callback)%定義回調(diào)函數(shù),作為子函數(shù)functionex54_9_Callback(obj,event)figure;x=0:pi/20:2*pi;y=sin(x);plot(x,y);2025/4/30(2)按鈕控件(pushbutton和togglebutton)增加背景圖片通過控件的CData屬性,用戶可以設(shè)置pushbutton和togglebutton的背景圖片,以美化圖形界面。實(shí)現(xiàn)的方法如下:設(shè)計一些按鈕的圖片,保存為jpg格式備用。例如示例中的mute.jpg。在圖形窗口中創(chuàng)建按鈕,對按鈕進(jìn)行初始化,設(shè)置其CData屬性值。【例】為按鈕添加背景圖片functionex54_10%創(chuàng)建圖形窗口對象hFig=figure('units','normalize','position',[0.40.40.30.2]);2025/4/30%創(chuàng)建下壓按鈕對象,設(shè)置其Callback屬性hPush=uicontrol('parent',hFig,...'style','pushbutton',...'String','',...'units','normalize',...'position',[0.40.40.20.2]);%讀取按鈕的背景圖片[a,map]=imread('mute.jpg');%取得圖片的尺寸[r,c,d]=size(a);%改變圖片的大小,使其和按鈕的大小相符x=ceil(r/30);y=ceil(c/30);g=a(1:x:end,1:y:end,:);%設(shè)置按鈕的CData屬性值set(hPush,'CData',g);程序運(yùn)行效果圖:2025/4/30(3)用戶界面控件的編程方法①創(chuàng)建用戶界面控件對象用戶可以在圖形界面上創(chuàng)建上述所列的10種用戶界面控件對象。創(chuàng)建這些對象需要調(diào)用MATLAB提供的uicontrol函數(shù),見,其常用的調(diào)用格式如下:handle=uicontrol(parent,'PropertyName',PropertyValue,...)其中,parent是父對象的句柄,指明要在什么對象中創(chuàng)建用戶界面控件。parent可以是figure、uipanel或uibuttongroup的句柄。用戶想創(chuàng)建uipanel或uibuttongroup控件對象,可以分別調(diào)用uipanel函數(shù)和uibuttongroup函數(shù)。handle=uipanel(parent,'PropertyName1',value1,'PropertyName2',value2,...);handle=uibuttongroup(parent,'PropertyName1',value1,'PropertyName2',value2,...);2025/4/30【例5.4-11】在圖形界面上創(chuàng)建uipanel控件,在uipanel上添加三個radiobutton,并設(shè)置第一個radiobutton為選中狀態(tài)functionex54_11%創(chuàng)建圖形窗口對象hFig=figure('units','normaliz

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論