Matlab的圖形用戶界面GUI.ppt
《Matlab的圖形用戶界面GUI.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《Matlab的圖形用戶界面GUI.ppt(55頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1,第七章 Matlab的圖形用戶界面GUI,GUI設(shè)計(jì)工具簡(jiǎn)介 GUI向?qū)гO(shè)計(jì) GUI程序設(shè)計(jì),2,第一節(jié) GUI設(shè)計(jì)工具簡(jiǎn)介,通常在開(kāi)發(fā)一個(gè)應(yīng)用程序時(shí)都會(huì)盡量做到界面友好、直觀。最常用的方法就是使用圖形用戶界面。在Matlab中,圖形用戶界面是一個(gè)包含多種對(duì)象的圖形窗口。用戶必須對(duì)功能對(duì)象進(jìn)行界面布局和編程,從而使用戶在激活GUI的功能對(duì)象時(shí)能夠執(zhí)行相應(yīng)的行為。 Matlab為用戶開(kāi)發(fā)圖形界面提供了一個(gè)方便、高效的集成開(kāi)發(fā)環(huán)境GUIDE(Graphic User Interface Development Environment)。GUIDE主要是一個(gè)界面設(shè)計(jì)工具集,Matlab將所有GUI的控件都集成在這個(gè)環(huán)境中并提供界面外觀、屬性和行為響應(yīng)方式的設(shè)置方法。GUIDE將用戶設(shè)計(jì)好的GUI界面保存在一個(gè)FIG文件中,同時(shí)還自動(dòng)生成一個(gè)包含GUI初始化和組件界面布局控制代碼的M文件。這個(gè)M文件為實(shí)現(xiàn)回調(diào)函數(shù)(當(dāng)用戶激活GUI某一個(gè)組件時(shí)執(zhí)行的函數(shù))提供了一個(gè)參考框架,這樣既簡(jiǎn)化了GUI應(yīng)用程序的創(chuàng)建工作,用戶又可以直接使用這個(gè)框架來(lái)編寫(xiě)自己的函數(shù)代碼。,3,整個(gè)GUI的實(shí)現(xiàn)過(guò)程可以分為以下幾步: 使用界面設(shè)計(jì)編輯器進(jìn)行GUI界面布局設(shè)計(jì); 理解應(yīng)用程序M文件中所使用的編程技術(shù); 編寫(xiě)GUI組件行為響應(yīng)控制(即回調(diào)函數(shù))代碼。 一、啟動(dòng)GUIDE 在Matlab中,GUIDE提供了多種設(shè)計(jì)模板以方便用戶使用GUI。這些模板均包含相關(guān)的回調(diào)函數(shù),用戶可以打開(kāi)它所對(duì)應(yīng)的M文件,看到它們的工作方式,或修改相應(yīng)的函數(shù),從而實(shí)現(xiàn)自己需要的功能。 在Matlab 中,可以通過(guò)如下兩種方法來(lái)訪問(wèn)模板: 直接輸入“guide”命令,打開(kāi)如圖7-1所示的界面; 通過(guò)File菜單中的New選項(xiàng)也可以打開(kāi)GUI模板界面。,4,,圖7-1 進(jìn)入GUI的初始界面,5,在創(chuàng)建新的GUI時(shí),Matlab 提供了空白模板、帶有控制按鈕的模板、帶有坐標(biāo)軸和菜單的模板以及問(wèn)答式對(duì)話框4種模板。其中空白模板如圖7-2所示:,,圖7-2 空白界面編輯器外觀圖,6,二、用戶界面控件對(duì)象介紹,在空白模板中GUIDE提供了用戶界面控件以及界面設(shè)計(jì)工具集來(lái)實(shí)現(xiàn)用戶界面的創(chuàng)建工作,用戶界面控件分布在界面編輯器的左側(cè),下面我們對(duì)各控件加以介紹。 :按鈕(Push Button),是小的矩形面,在其上面標(biāo)有說(shuō)明該按鈕功能的文本。將鼠標(biāo)指針移動(dòng)至按鈕,單擊鼠標(biāo),按鈕被按下隨即自動(dòng)彈起,并執(zhí)行回調(diào)程序。 按鈕的“Style”屬性的默認(rèn)值是“pushbotton”。,7,:開(kāi)關(guān)按鈕(Toggle Button) 和一般按鈕形狀相同,區(qū)別在于它有兩種狀態(tài),用鼠標(biāo)單擊按鈕,它會(huì)從一種狀態(tài)變成另一種狀態(tài),并執(zhí)行相應(yīng)的回調(diào)程序(兩種狀態(tài)各對(duì)應(yīng)不同的回調(diào)程序)。 按鈕“開(kāi)”時(shí),Value屬性的值為在Max屬性中指定的值;按鈕“關(guān)”時(shí),Value屬性的值為在Min屬性中指定的值。 按鈕的“Style”屬性的默認(rèn)值是“togglebutton”。 :編輯框(Edit Text),允許用戶動(dòng)態(tài)地編輯文本字符串或數(shù)字,就象使用文本編輯器或文字處理器一樣。編輯框一般用于讓用戶輸入或修改文本字符串和數(shù)字。 編輯框的“String”屬性“的默認(rèn)值是“Edit Text”。,8,:單選按鈕(Radio Button),又稱無(wú)線按鈕,它由一個(gè)標(biāo)注字符串(在“String” 屬性中設(shè)置)和字符串左側(cè)的一個(gè)小圓圈組成。當(dāng)它被選擇時(shí),圓圈被填充一個(gè)黑點(diǎn),且屬性“Value”的值為“1”;若未被選擇,圓圈為空,屬性的“Value”值為“0”。 單選按鈕一般用于在一組互斥的選項(xiàng)中選擇一項(xiàng)。為了確?;コ庑?,各單選按鈕的回調(diào)程序需要將其它各項(xiàng)的“Value”值設(shè)為“0”。 單選按鈕 “style”的屬性的默認(rèn)值是“Radio Button”。,9,: 彈出式菜單(Pop-up Menu),向用戶提出互斥的一系列選項(xiàng)清單,用戶可以選擇其中的某一項(xiàng)。彈出式菜單下拉式菜單,它不受菜單條的限制,可以位于圖形窗口內(nèi)的任何位置。 通常狀態(tài)下,彈出式菜單以矩形的形式出現(xiàn),矩形中含有當(dāng)前選擇的選項(xiàng),在選項(xiàng)右側(cè)有一個(gè)向下的箭頭來(lái)表明該對(duì)象是一個(gè)彈出式菜單。當(dāng)指針處在彈出式菜單的箭頭之上并按下鼠標(biāo)時(shí),出現(xiàn)所有選項(xiàng)。移動(dòng)指針到不同的選項(xiàng),單擊鼠標(biāo)左鍵就選中了該選項(xiàng),同時(shí)關(guān)閉彈出式菜單,顯示新的選項(xiàng)。 選擇一個(gè)選項(xiàng)后,彈出式菜單的“Value”屬性值為該選項(xiàng)的序號(hào)。 彈出式菜單的“Style”屬性的默認(rèn)值是“popupmenu”,在“string”屬性中設(shè)置彈出式菜單的選項(xiàng)字符串,在不同的選項(xiàng)之間用“|”分隔,類似于換行。,:,10,:圖文框(Panel),圖文框是填充的矩形區(qū)域。一般用來(lái)把其它控件放入圖文框中,組成一組。圖文框本身沒(méi)有回調(diào)程序。注意只有用戶界面控件可以在圖文框中顯示。由于圖文框是不透明的,因而定義圖文框的順序就很重要,必須先定義圖文框,然后定義放到圖文框中的控件。因?yàn)橄榷x的對(duì)象先畫(huà),后定義的對(duì)象后畫(huà),后畫(huà)的對(duì)象覆蓋到先畫(huà)的對(duì)象上。,:靜態(tài)文本框(text),靜態(tài)文本框用來(lái)顯示文本字符串,該字符串內(nèi)容由屬性“string”確定。靜態(tài)文本框之所以稱為“靜態(tài)”,是因?yàn)槲谋静荒鼙粍?dòng)態(tài)的修改,而只能通過(guò)改變“String”屬性來(lái)更改。靜態(tài)文本框一般用于顯示標(biāo)記、提示信息及當(dāng)前值。靜態(tài)文本框的“Style”屬性的默認(rèn)值是“text”。,:,11,:列表框(listbox),列表框列出一些選項(xiàng)的清單,并允許用戶選擇其中的一個(gè)或多個(gè)選項(xiàng),一個(gè)或多個(gè)的模式由Min和Max屬性控制。Value 屬性的值為被選中選項(xiàng)的序號(hào),同時(shí)也指示了選中選項(xiàng)的個(gè)數(shù)。 當(dāng)單擊鼠標(biāo)按鈕選中該項(xiàng)后,Value屬性的值被改變,釋放鼠標(biāo)按鈕的時(shí)候Matlab執(zhí)行列表框的回調(diào)程序。 列表框的“Style”屬性的默認(rèn)值是“l(fā)istbox”。 :復(fù)選框(checkbox),又稱檢查框,它由一個(gè)標(biāo)注字符串(在“String”屬性中設(shè)置)和字符串左側(cè)的一個(gè)小方框所組成。選中時(shí)在方框內(nèi)添加“√”符號(hào),“Value”屬性值設(shè)為“1”;未選中時(shí)方框變空,“Value”屬性值設(shè)為“0”。復(fù)選框一般用于表明選項(xiàng)的狀態(tài)或?qū)傩浴?12,:滑動(dòng)條(slider),又稱滾動(dòng)條,包括三個(gè)部分,分別是滑動(dòng)槽,表示取值范圍;滑動(dòng)槽內(nèi)的滑塊,代表滑動(dòng)條的當(dāng)前值;以及在滑動(dòng)條兩端的箭頭,用于改變滑動(dòng)條的值。 滑動(dòng)條一般用于從一定的范圍中取值。改變滑動(dòng)條的值有三種方式,一種是用鼠標(biāo)指針拖動(dòng)滑塊,在滑塊位于期望位置后放開(kāi)鼠標(biāo);另一種是當(dāng)指針處于滑塊槽中但不在滑塊上時(shí),單擊鼠標(biāo)按鈕,滑塊沿該方向移動(dòng)一定距離,距離的大小在屬性“SliderStep”中設(shè)置,缺省情況下等于整個(gè)范圍的10%;第三種方式是在滑塊條的某一端用鼠標(biāo)單擊箭頭,滑塊沿著箭頭的方向移動(dòng)一定的距離,距離的大小在屬性“SliderStep”中設(shè)置,缺省情況下為整個(gè)范圍的1%。 滑動(dòng)條的“Style”屬性的默認(rèn)值是“slider” :按鈕組(Button Group),放到按鈕組中的多個(gè)單選按鈕具有排它性,但與按鈕組外的單選按鈕無(wú)關(guān)。制作界面時(shí)常常會(huì)遇到有幾組參數(shù)具有排它性的情況,即每一組中只能選擇一種情況。此時(shí),可以用幾組按鈕組表示這幾組參數(shù),每一組單選按鈕放到一個(gè)按鈕組控件中。,13,,圖7-3 帶有控件的圖形界面編輯器外觀圖,三、幾何位置排列工具,14,利用對(duì)象對(duì)齊工具,可以很方便地對(duì)對(duì)象設(shè)計(jì)編輯器中設(shè)計(jì)區(qū)內(nèi)多個(gè)對(duì)象的位置進(jìn)行調(diào)整。從對(duì)象設(shè)計(jì)編輯器界面的工具欄上選擇按鈕,或者選擇“Tools”菜單下的“Align Objects.”選項(xiàng),可以打開(kāi)對(duì)象位置調(diào)整器,如圖7-4所示:,,圖 7-4 排列工具欄外觀圖,利用對(duì)象對(duì)齊工具,可以設(shè)置對(duì)象在垂直方向和水平方向上的對(duì)齊方式和間距。選中多個(gè)對(duì)象后,可以方便地通過(guò)對(duì)象對(duì)齊工具進(jìn)行調(diào)整。 上半部分為垂直方向調(diào)整控制區(qū),下面為水平方向調(diào)整控制區(qū)。將在下節(jié)GUI的向?qū)гO(shè)計(jì)中進(jìn)一步熟悉排列工具的使用。,15,四、用屬性編輯器設(shè)置控件屬性,利用對(duì)象屬性編輯器,可以查看、修改和設(shè)置每個(gè)對(duì)象的屬性值,在對(duì)象設(shè)計(jì)編輯器界面工具欄上選擇“View” 下的“Inspect Properties”選項(xiàng),可以打開(kāi)對(duì)象屬性編輯器。另外,在Matlab命令窗口的命令行輸入inspect,也可以打開(kāi)對(duì)象屬性編輯器。對(duì)象屬性編輯器如圖7-5所示:,,圖7-5 屬性編輯器外觀圖,16,五、菜單編輯器 利用菜單編輯器,可以創(chuàng)建、設(shè)置、修改下拉式菜單和彈出式菜單。在GUIDE中單擊工具欄上的按鈕,或者選擇“Tools”菜單中的“Menu Editor”選項(xiàng),打開(kāi)菜單編輯器的界面,如圖7-6所示:,,圖 7-6 菜單編輯器界面圖,GUIDE能夠創(chuàng)建兩種類型的菜單。一種是在圖形窗口菜單欄中顯示的菜單欄菜單;另一種是當(dāng)用戶在圖形對(duì)象上單擊鼠標(biāo)右鍵時(shí)產(chǎn)生的上下文菜單??梢允褂貌藛尉庉嬈鱽?lái)創(chuàng)建這兩種類型的菜單。,17,1.創(chuàng)建菜單欄菜單 圖7-6中左上角第一個(gè)按鈕用于創(chuàng)建下拉式菜單。用戶可以通過(guò)點(diǎn)擊它來(lái)創(chuàng)建下拉式主菜單;第二個(gè)按鈕用于創(chuàng)建下拉式菜單的子菜單,在選中已經(jīng)創(chuàng)建的下拉式菜單后,可以單擊這個(gè)按鈕來(lái)創(chuàng)建選中的下拉式主菜單的子菜單。選中創(chuàng)建的某個(gè)下拉式菜單后,菜單編輯器的右邊就會(huì)出現(xiàn)顯示該菜單的有關(guān)屬性,用戶可以在這里設(shè)置、修改菜單的屬性。,,圖 7-7 下拉式菜單創(chuàng)建圖,18,2. 創(chuàng)建上下文菜單 利用菜單編輯器創(chuàng)建上下文菜單對(duì)象后,當(dāng)用戶在圖形對(duì)象上單擊鼠標(biāo)右鍵時(shí),上下文菜單會(huì)隨之出現(xiàn),這樣可以根據(jù)上下文的具體內(nèi)容修改圖形對(duì)象的相應(yīng)屬性,故菜單編輯器能夠創(chuàng)建上下文菜單并將菜單與圖形對(duì)象聯(lián)系起來(lái)。,,圖7-8 上下文菜單創(chuàng)建圖,注意:在創(chuàng)建菜單之前要選擇菜單編輯器的Context Menu標(biāo)簽界面。,19,六、對(duì)象瀏覽器 利用對(duì)象瀏覽器,可查看當(dāng)前所創(chuàng)建的圖形對(duì)象。從對(duì)象設(shè)計(jì)編輯器界面的工具欄上選擇,或者選擇“View”菜單下的“Object Browser”選項(xiàng),可以打開(kāi)對(duì)象瀏覽器。,圖 7-9 對(duì)象瀏覽器,20,第二節(jié) GUI向?qū)гO(shè)計(jì),GUI的向?qū)гO(shè)計(jì),簡(jiǎn)單地說(shuō),就是利用GUI設(shè)計(jì)工具集實(shí)現(xiàn)多種控制對(duì)象的設(shè)計(jì)。本節(jié)我們將通過(guò)實(shí)例實(shí)踐其具體操作過(guò)程。 【例7-1】 設(shè)計(jì)一個(gè)帶有三個(gè)按鈕和一個(gè)坐標(biāo)軸的圖形用戶界面,當(dāng)用鼠標(biāo)點(diǎn)擊三個(gè)按鈕時(shí),分別在坐標(biāo)軸內(nèi)畫(huà)sphere,和membrane三個(gè)圖形。peaks 創(chuàng)建控件 前面我們已經(jīng)建立了帶有一個(gè)坐標(biāo)軸和三個(gè)按鈕控件的圖形界面,這里就不贅述了,如前圖7-3所示。 設(shè)置控件對(duì)齊方式 若控件排列不夠整齊,當(dāng)控件個(gè)數(shù)較少時(shí),逐個(gè)調(diào)整尚可,但當(dāng)控件個(gè)數(shù)較多時(shí),逐個(gè)調(diào)整將變得麻煩,費(fèi)時(shí),這時(shí)我們可以應(yīng)用幾何位置排列工具對(duì)控件的位置進(jìn)行調(diào)整。 首先要將待調(diào)整的控件同時(shí)選中。選中方法有兩種:一是按住“Ctrl”鍵,用鼠標(biāo)左鍵逐一點(diǎn)擊要調(diào)整的控件;二是按住鼠標(biāo)左鍵進(jìn)行拖拽框選,然后點(diǎn)擊工具欄上的打開(kāi)幾何位置排列工具窗口,再點(diǎn)擊下面的,使得所選的控件左對(duì)齊,點(diǎn)擊“確定”后,界面設(shè)計(jì)編輯器效果如圖7-10所示。,21,,圖7-10 調(diào)整空間位置后的界面設(shè)計(jì)編輯器外觀圖,22,設(shè)置控件屬性 圖7-10 共有三個(gè)按鈕,且每個(gè)按鈕行使相應(yīng)的功能,在按鈕上雙擊鼠標(biāo)左鍵可以打開(kāi)按鈕屬性編輯器,如圖7-11所示,該圖的左側(cè)是按鈕的所有屬性,右側(cè)是其屬性值。,,圖7-11 按鈕屬性編輯器外觀圖,23,編寫(xiě)回調(diào)程序 前三部的工作結(jié)束后,界面上的三個(gè)按鈕就要行使其功能了。首先,點(diǎn)擊菜單欄上的保存按鈕進(jìn)行文件的保存,此時(shí),會(huì)彈出“save as”對(duì)話框,如圖7-14所示,進(jìn)行FIG文件保存,文件命名為myGUI。,,圖 7-14 保存圖形界面的對(duì)話框圖,24,同時(shí),Matlab會(huì)自動(dòng)創(chuàng)建一個(gè)同名的M文件,并且自動(dòng)打開(kāi),如圖7-15所示。,,圖7-15 自動(dòng)生成的M文件,其次,在自動(dòng)生成的M文件中,找到與三個(gè)按鈕有關(guān)的回調(diào)子函數(shù),本例中的回調(diào)子函數(shù)見(jiàn)圖7-16所示的光標(biāo)定位處(這里我們僅截取了按鈕1的回調(diào)子函數(shù))。,25,,圖7-16 按鈕1的回調(diào)子函數(shù)定位圖,,26,下面就可以在該子函數(shù)的空白處填寫(xiě)回調(diào)程序了。 例如,按鈕“sphere”的回調(diào)程序?yàn)椋?sphere; axis tight; 按鈕“peaks”的回調(diào)程序?yàn)椋?peaks; axis tight; 按鈕“membrane”的回調(diào)程序?yàn)椋?membrane; axis tight; 上面的三個(gè)回調(diào)程序在自動(dòng)生成的命名為myGUI的M文件 編輯器中錄入的情況如圖7-17所示,為了減少圖占用太大 的空間,將編輯器中三個(gè)子函數(shù)部分的解釋性語(yǔ)句已刪去。,27,,圖7-17 M文件編輯器中的三個(gè)按鈕的回調(diào)子函數(shù),,28,程序錄入后,點(diǎn)擊保存圖標(biāo),將M文件重新保存, 然后點(diǎn)擊M文件編輯器上的運(yùn)行快捷按鈕或返回 到圖7-13未被激活的圖形界面,點(diǎn)擊工具欄上的 運(yùn)行圖標(biāo),此時(shí)則生成如圖7-18(a)所示的被激活 的圖形界面。當(dāng)點(diǎn)擊“sphere”按鈕時(shí),在空白的 坐標(biāo)軸處出現(xiàn)球體,如圖7-18(b)所示;點(diǎn)擊 “peaks”按鈕時(shí),在空白的坐標(biāo)軸處出現(xiàn)尖峰圖, 如圖7-18(c)所示;點(diǎn)擊“membrane”按鈕時(shí),在 空白的坐標(biāo)軸處出現(xiàn)membrane圖,如圖7-18(d) 所示。,29,,,(a) (b),,(c) (d) 圖7-18 運(yùn)行結(jié)果 (a) 被激活后的界面; (b) sphere圖; (c) peaks圖; (d) membrane圖,30,至此,圖形界面的GUI向?qū)гO(shè)計(jì)就完成了。還有一點(diǎn)需要說(shuō)明的是,在編寫(xiě)回調(diào)程序時(shí),也可以在屬性編輯器的Callback屬性中錄入代碼。事實(shí)上,兩種方法得到的結(jié)果是相同的。但是,第二種方法(直接修改Callback屬性值)適用于代碼語(yǔ)句少的的情況,如果函數(shù)體由多條語(yǔ)句組成,最好采用本例所使用的方法。,31,第三節(jié) GUI程序設(shè)計(jì),這一節(jié)我們將介紹如何應(yīng)用,用函數(shù)編寫(xiě)用戶界面,主要涉及三個(gè)函數(shù):uimenu(菜單),uicontextmenu(上下文菜單)和uicontrol(控件)。 一、用戶界面菜單對(duì)象和上下文菜單對(duì)象的建立 1. 用戶界面菜單對(duì)象的建立 自制用戶菜單對(duì)象,通過(guò)函數(shù)uimenu創(chuàng)建,調(diào)用格式 為: h=uimenu(‘PropertyName1’,value1,‘PropertyName2’,value2,…),,32,即在當(dāng)前圖形窗口上部的菜單欄創(chuàng)建一個(gè)菜 單對(duì)象,并返回一個(gè)句柄值。函數(shù)變量 PropertyName是所建菜單的屬性,value是屬 性值。菜單對(duì)象的屬性分為公共屬性、基本 控制屬性和callback管理屬性三部分,關(guān)于 屬性及其的詳細(xì)內(nèi)容見(jiàn)Matlab幫助文件,這 里介紹一些常用重要屬性的設(shè)置方法。,33,① label和callback 這是菜單對(duì)象的基本屬性,編寫(xiě)一個(gè)具有基本功能的菜單必須要設(shè)置label和callback屬性。label是在菜單項(xiàng)上顯示的菜單內(nèi)容;callback是用來(lái)設(shè)置菜單項(xiàng)的回調(diào)程序。 ② checked和 separator checked 屬性用于設(shè)置是否在菜單項(xiàng)前添加選中標(biāo)記。記為”on”表示添加,”off”表示不添加。因?yàn)橛行┎藛蔚倪x中標(biāo)記相斥,這就要求給一個(gè)菜單項(xiàng)添加選中標(biāo)記的同時(shí)去掉另一個(gè)選項(xiàng)的標(biāo)記; separator 用于在菜單項(xiàng)之前添加分隔符,以便使菜單更加清晰。 ③ Background Color和 Foreground Color Background Color(背景色)是菜單本身的顏色; Foreground Color(前景色)是菜單內(nèi)容的顏色。,34,【例7-2】 建立一個(gè)包含用戶界面菜單項(xiàng)的圖形界面,并可執(zhí)行菜單項(xiàng)的相應(yīng)功能,分別繪制membrane、peaks和sinc函數(shù)圖形。 Matlab程序如下: % 首先建立一個(gè)圖形窗口,去除窗口本身包含的菜單條和工具條,并命名為myfirstGUI h0=figure(menubar,none,toolbar,none,name,myfirstGUI); % 從左至右,依次建立各級(jí)菜單% 先建立【Draw】菜單和其下的【Membrane】【Peaks】和【Sinc】子菜單項(xiàng) h1=uimenu(h0,label,Draw); h11=uimenu(h1,label,Membrane,callback,membrane); h12=uimenu(h1,label,Peaks,callback,peaks); h13=uimenu(h1,label,Sinc,callback,. [[x,y]=meshgrid(-5:0.5:5);,r=sqrt(x.^2+y.^2)+eps;,. z=sin(r)./r;,surf(z);]); 該段代碼運(yùn)行后,生成如圖7-19所示的帶菜單界面圖。,,35,圖7-19 生成“membrane”的圖形界面,36,% 建立第二個(gè)菜單【Colormap】及其下的【Cool】【Hot】【Default】子菜單項(xiàng),當(dāng)某項(xiàng)被選中時(shí),添加選中標(biāo)記,同時(shí)去掉其它選項(xiàng)的選中標(biāo)記h2=uimenu(h0,label,ColorMap); h22(1)=uimenu(h2,label,Hot,. callback,. [set(h22,checked,off);,. set(h22(1),checked,on);,colormap(hot);]); h22(2)=uimenu(h2,label,Cool,. callback,. [set(h22,checked,off);,. set(h22(2),checked,on);,colormap(cool);]); h22(3)=uimenu(h2,label,Spring,. callback,. [set(h22,checked,off);,. set(h22(3),checked,on);,colormap(Spring);]); 該段代碼運(yùn)行后,生成如圖7-20所示的界面圖。,,37,圖7-20 生成“hot”效果的圖形界面,38,% 建立控制坐標(biāo)軸的顯示菜單【Axis】,用于是否顯示坐標(biāo)軸h3=uimenu(h0,label,Axis); h31=uimenu(h3,label,Axis on,callback,axis on);h32=uimenu(h3,label,Axis off,callback,axis off); 該段代碼運(yùn)行后,生成如圖7-21所示的界面圖。,,圖7-21 生成帶坐標(biāo)軸的圖形界面,39,% 建立關(guān)閉圖形用戶界面按鈕【close】hbutton=uicontrol(position,[80 30 60 30],string,close,fontsize,8,… fontweight,bold,callback,close); 至此,就形成了一個(gè)用戶菜單界面,執(zhí)行結(jié)果如圖7-19、7-20和7-21所示的三個(gè)圖形。實(shí)際上,運(yùn)行上面的代碼后,僅產(chǎn)生一個(gè)圖形界面,為了讓讀者看清界面內(nèi)的主菜單下的子菜單所對(duì)應(yīng)的功能,在相應(yīng)的位置給出了該子菜單的Callback屬性的回調(diào)程序結(jié)果。,,40,提示:在單引號(hào)內(nèi)的字符串必須用兩單引號(hào) (不等于雙引號(hào))表示所需的單引號(hào); 在設(shè)置選中標(biāo)記時(shí),先用命令 set( h22,”check”,”off”), 將h22中三個(gè)句柄對(duì)應(yīng)的菜單項(xiàng)都設(shè) 為未選中狀態(tài),然后,把選擇的菜單項(xiàng) 設(shè)為選中狀態(tài),以保證多個(gè)選項(xiàng)之間 的互斥性。,41,2. 用戶界面上下文菜單的建立 用戶界面上下文菜單對(duì)象,與固定位置的菜單對(duì)象相比,上下文菜單對(duì)象的位置不固定,總是與某個(gè)(些)圖形對(duì)象相聯(lián)系,并通過(guò)鼠標(biāo)右鍵激活,制作上下文菜單步驟如下: ① 利用函數(shù)uicontextmenu創(chuàng)建上下文菜單對(duì)象; ② 利用函數(shù)uimenu為該上下文菜單對(duì)象制作具體的菜單項(xiàng); ③ 利用函數(shù)set將該上下文菜單對(duì)象和某些圖形對(duì)象 聯(lián)系在一起。 下面通過(guò)示例看一下uicontextmenu函數(shù)的使用。,42,【例7-3】 在一個(gè)圖形窗口繪制拋物線和余弦曲線,并創(chuàng)建一個(gè)與之相聯(lián)系的上下文菜單,用于控制線條的顏色、線寬、線型及標(biāo)記點(diǎn)風(fēng)格。 Matlab程序如下: % 畫(huà)曲線y1,并設(shè)置其句柄h=uicontextmenu; t=-1:0.1:1;subplot(2,1,1);y1=t.^2;h_line1=plot(t,y1); % 建立上下文菜單 uimenu(h,label,red,callback,set(h_line1,color,r)); uimenu(h,label,green,callback,set(h_line1,color,g)); uimenu(h,label,yellow,callback,set(h_line1,color,y)); uimenu(h,label,linewidth1.5,callback,set(h_line1,linewidth,1.5)); uimenu(h,label,linestyle*,callback,set(h_line1,linestyle,*)); uimenu(h,label,linestyle:,callback,set(h_line1,linestyle,:)); uimenu(h,label,marker,callback,set(h_line1,marker,s)); set(h_line1,‘uicontextmenu’,h) % 使上下文菜單與正弦曲線h_line1相聯(lián)系 title(拋物線和余弦曲線,fontweight,bold,fontsize,14) set(gca,xtick,[-1:0.5:1]) % 設(shè)置坐標(biāo)軸的標(biāo)度范圍 set(gca,xticklabel,{-1,0.5,0,0.5,1}) % 設(shè)置坐標(biāo)軸的標(biāo)度值,43,%畫(huà)曲線y2, 并設(shè)置其句柄 subplot(2,1,2);t=0:0.1:2*pi;y2=cos(t);h_line2=plot(t,y2); h=uicontextmenu; uimenu(h,label,red,callback,set(h_line2,color,r)); uimenu(h,label,crimson,callback,set(h_line2,color,m)); uimenu(h,label,black,callback,set(h_line2,color,k)); uimenu(h,label,linewidth1.5,callback,set(h_line2,linewidth,1.5)); uimenu(h,label,linestyle*,callback,set(h_line2,linestyle,*)); uimenu(h,label,linestyle:,callback,set(h_line2,linestyle,:)); uimenu(h,label,marker,callback,set(h_line2,marker,s)); set(h_line2,uicontextmenu,h) set(gca,xtick,[0:pi/2:2*pi]) set(gca,xticklabel,{0,pi/2,pi,3pi/2,2pi}) xlabel(time 0-2\pi,fontsize,10),44,% 建立關(guān)閉圖形用戶界面按鈕【close】 hbutton=uicontrol(position,[80 30 60 30],string,close, fontsize,8,fontweight,bold,callback,close); 在Matlab中運(yùn)行該程序段,得到如圖7-22所示圖形。將鼠標(biāo)指向線條,單擊鼠標(biāo)右鍵,彈出上下文菜單,在選中某菜單項(xiàng)后,將執(zhí)行該菜單項(xiàng)的操作。,,,,45,(a) (b) 圖7-22 帶有上下文菜單的圖形界面 (a) 將拋物線的線型設(shè)為“*”時(shí)的圖形界面;(b) 將余弦曲線的線寬設(shè)為“1.5”時(shí)的圖形界面,46,二、用戶界面控件對(duì)象的建立 除了菜單以外,控件對(duì)象是另一種實(shí)現(xiàn)用戶與計(jì)算機(jī)交互的重要手段。用戶界面控件對(duì)象是這樣一類圖形界面的對(duì)象:用戶用鼠標(biāo)在控件對(duì)象上進(jìn)行操作,鼠標(biāo)點(diǎn)擊控件時(shí),將激活該控件所對(duì)應(yīng)的后臺(tái)應(yīng)用程序,并執(zhí)行該程序。利用函數(shù)命令創(chuàng)建控件對(duì)象的格式為: H=uicontrol (PropertyName1,value1,PropertyName2,value2,…) 當(dāng)用函數(shù)創(chuàng)建控件時(shí),這里我們有必要對(duì)控件的幾個(gè)重要屬性給予介紹。,47,Value屬性:控件的當(dāng)前值,格式為標(biāo)量或變量。該屬性對(duì)不同的控件有不同的取值方式,分別為: 復(fù)選框:當(dāng)此控件被選中時(shí),Value的值為屬性Max中的設(shè)置的值;未被選中時(shí)Value 的值為屬性中設(shè)置的值。 列表框:被選中選項(xiàng)的序號(hào),當(dāng)有多個(gè)選項(xiàng)被選中時(shí), Value的屬性值為向量。序號(hào)指的是選項(xiàng)的排列次序, 最上面的選項(xiàng)序號(hào)為1,第二個(gè)選項(xiàng)序號(hào)為2。 彈出式菜單:和列表框類似,也是被選中選項(xiàng)的序號(hào), 只是彈出式菜單只能有一個(gè)選項(xiàng)被選中,因而Value 屬性值是標(biāo)量。 單選按鈕:被選中時(shí)Value的值為屬性Max中設(shè)置的值: 未被選中時(shí),Value的值為屬性Min中設(shè)置的值。 滑動(dòng)條:Value的值等于滑塊指定的值。 開(kāi)關(guān)按鈕:“開(kāi)”時(shí)Value的值為屬性Max中設(shè)置的值: “關(guān)”時(shí)Value的值為屬性Min中設(shè)置的值。,48,Max屬性:指定Value屬性中可以設(shè)置的最大值,格式為標(biāo)量。該屬性對(duì)不同的控件有不同的含義,分別如下所述:,復(fù)選框:當(dāng)復(fù)選框被選中時(shí)Value屬性的取值。 編輯框:如果Max的值減去Min的值大于1,那么編輯框可以接受多行輸入文本;如果Max的值減去Min的值小于或等于1,那么編輯器只能接受一行輸入文本。 列表框:如果Max的值減去Min的值大于1,那么允許選取多個(gè)選項(xiàng);如果Max的值減去Min的值小于或等于1,那么只能選取一個(gè)選項(xiàng)。 單選按鈕:當(dāng)單選按鈕被選中時(shí)Value屬性的取值。 滑動(dòng)條:滑動(dòng)條的最大值,缺省值是1 開(kāi)關(guān)按鈕:當(dāng)開(kāi)關(guān)按鈕“開(kāi)”(被選中)時(shí)Value屬性的取值。缺省值是1。,文本框、彈出式菜單、按鈕和靜態(tài)文本框無(wú)此屬性。,49,Min屬性:指定Value屬性中可以設(shè)置的最小值,格式為標(biāo)量。該屬性對(duì)不同的控件有不同的含義,分別如下所述:,復(fù)選框:當(dāng)復(fù)選框被選中時(shí)Value屬性的取值。 編輯框:如果Max 的值減去Min的值大于1,那么編輯框可以接受多行輸入文本;如果Max的值減去Min的值小于或等于1,那么編輯器只能接受一行輸入文本。 列表框:如果Max的值減去Min的值大于1,那么允許選取多個(gè)選項(xiàng);如果Max的值減去Min的值小于或等于1,那么只能選取一個(gè)選項(xiàng)。 單選按鈕:當(dāng)單選按鈕未被選中時(shí)Value屬性的取值。 滑動(dòng)條:滑動(dòng)條的最小值,缺省值是0。 開(kāi)關(guān)按鈕:當(dāng)開(kāi)關(guān)按鈕“開(kāi)”(被選中)時(shí)屬性的取值。缺省值是1。,文本框、彈出式菜單、按鈕和靜態(tài)文本框無(wú)此屬性。,50,【例7-4】 建立一個(gè)包含控件的圖形用戶界面,點(diǎn)擊控件時(shí)執(zhí)行該控件的相應(yīng)功能,要求繪制membrane,peaks和sphere函數(shù)圖形,并有光照控制效果。 % 建立圖形窗口和坐標(biāo)軸,去除窗口本身的菜單條和工具條,并命名為 mysecondGUI h0=figure(menubar,none,toolbar,none,position,[198 56 408 468],name,mysecondGUI); h1=axes(parent,h0,position,[0.15 0.45 0.7 0.5],visible,off); % 建立靜態(tài)文本框和動(dòng)態(tài)文本框 htext1=uicontrol(parent,h0,units,points,position,[54 110 45 15],string,input title,style,text); hedit=uicontrol(parent,h0,units,points,position,[100 110 45 16],callback,title(get(hedit,string)),style,edit);,51,% 創(chuàng)建三個(gè)按鈕 hbutton1=uicontrol(parent,h0,units,points,string,Sphere,. position,[20 65 50 18],callback,mesh(sphere);axis tight); hbutton2=uicontrol(parent,h0,units,points,string,Membrane,. position,[75 65 50 18],callback,mesh(membrane);axis tight); hbutton3=uicontrol(parent,h0,units,points,string,Sinc,position,[135 65 50 18],callback,. [[x,y]=meshgrid(-5:0.5:5);,r=sqrt(x.^2+y.^2)+eps;, z=sin(r)./r;,mesh(x,y,z)]); % 創(chuàng)建靜態(tài)文本框和滾動(dòng)條,鼠標(biāo)拖動(dòng)滾動(dòng)條控制圖形的顏色變化 htext2=uicontrol(parent,h0,units,points,position,. [20 30 45 15],string,brightness,style,text); hslider=uicontrol(parent,h0,units,points,position,. [65 30 120 15],min,-1,max,1,style,slider,callback,. brighten(get(hslider,value))); % 建立靜態(tài)文本框和五個(gè)單選按鈕,52,htext3=uicontrol(parent,h0,units,points,position,. [200 130 80 15],string,select color:,style,text); hradio(1)=uicontrol(parent,h0,units,points,position,. [200 115 80 15],string,default,style,. radiobutton,value,1,callback,. [set(hradio,value,0);,set(hradio(1),value,1);,. colormap(default)]); hradio(2)=uicontrol(parent,h0,units,points,position,. [200 100 80 15],string,spring,style,. radiobutton,value,1,callback,. [set(hradio,value,0);,set(hradio(2),value,1);,. colormap(spring)]); hradio(3)=uicontrol(parent,h0,units,points,position,. [200 85 80 15],string,summer,style,. radiobutton,value,1,callback,. [set(hradio,value,0);,set(hradio(3),value,1);,. colormap(summer)]);,53,hradio(4)=uicontrol(parent,h0,units,points,position,. [200 70 80 15],string,autumn,style,. radiobutton,value,1,callback,. [set(hradio,value,0);,set(hradio(4),value,1);,. colormap(autumn)]); hradio(5)=uicontrol(parent,h0,units,points,position,. [200 55 80 15],string,winter,style,. radiobutton,value,1,callback,. [set(hradio,value,0);,set(hradio(5),value,1);,. colormap(winter)]); % 建立關(guān)閉圖形用戶界面按鈕【close】 hbutton4=uicontrol(parent,h0,units,points,string,Close,. position,[200 30 50 18],callback,close);,54,至此,一個(gè)帶有控件的圖形用戶界面就建好了,把上述程序保存,生成一個(gè)M文件,命名為mysecondGUI,然后在Matlab的命令窗口運(yùn)行此文件,會(huì)生成一個(gè)下半部分僅帶控件,上半部分為空的圖形界面。在靜態(tài)文本框中輸入“sinc”,點(diǎn)擊“Sinc”按鈕,則產(chǎn)生如圖7-23所示的圖形界面。,,圖7-23 生成Sinc圖形的GUI界面,55,同理,點(diǎn)擊另外兩個(gè)按鈕“Sphere”和“Membrane”,會(huì)生成相應(yīng)的三維圖形;在滾動(dòng)條上按住鼠標(biāo)左鍵不動(dòng),拖動(dòng)鼠標(biāo)會(huì)產(chǎn)生不同的明亮度效果;用鼠標(biāo)點(diǎn)擊單選按鈕,會(huì)產(chǎn)生不同的色彩效果。這里就不一一給出界面圖了。 提示: 在【例7-2】中的代碼“r=sqrt(x.^2+y.^2)+eps”中出現(xiàn)了 “eps”,它是誤差容限,或者說(shuō)是一個(gè)極其微小的趨緊于0的 非零小數(shù),這里之所以要把它加進(jìn)來(lái),是因?yàn)樽兞縭是 “z=sin(r)./r”的分母,而根據(jù)對(duì)x和y的賦值,存在r=0這種 情況,加上eps后,可以避開(kāi)分母為零的非法情況,若不加eps, 盡管也會(huì)得到運(yùn)行結(jié)果,但在命令窗口會(huì)出現(xiàn)“Warning: Divide by zero.”這樣的警告提示。在這個(gè)窗口中,我們?nèi)サ袅瞬藛螜?和工具條,是由代碼第一行中menubar,none,toolbar,none 完成的,若無(wú)此代碼,則界面圖上會(huì)出現(xiàn)菜單欄和工具條。,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Matlab 圖形 用戶界面 GUI
鏈接地址:http://m.appdesigncorp.com/p-2496220.html