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