利用純m文件生成ui界面(一)

寫blog的背景

這學期課程設計學了關於ui的許多東西,正好在高鐵上比較空就想馬克一下。
從一開始的用guide再到純m文件生成ui。是一種飛躍式的增長。技術這東西沒有止境,只有一直研究一直做纔可能做精,這中間需要無數的挫折和改正。

利用*.m生成ui界面的好處

  1. 讓你對Matlab的數據存儲以及各種參數更加的瞭解。
  2. 可以讓你省去大量無用的註釋,雖然利用設置裏面的去除ui的註釋,但是還是失去了靈魂。
  3. 最爲重要的是,利用guide生成的ui其實本質上也是生成一種figure文件,而最爲關鍵的是,其實guide自動生成了*.fig,如果打包不加入.fig文件的話就會運行不了。

利用*.m生成ui界面的壞處

  1. 由於不是傻瓜式的操作,所以每個控件的位置需要一定的嘗試,即position矩陣的位置。
  2. 如果你對許多屬性不瞭解的話,你會非常的痛苦,當然這可以利用guide裏面的對象屬性框來嘗試學習。
  3. 由於缺失了guide裏一些語句,你在書寫時需要額外加入一些以保證參數的傳遞。

正文

Matlab圖形對象的層次

在這裏插入圖片描述
這是從mathworks裏截下來的圖,可以看到0級對象(也有人說是1級對象)是root,1級對象是Figure後面(從右往左)分別是ui的對象、解釋的對象、座標軸 、註解的對象。它就好想一個家族系譜一樣,事實上也是如此,其實0級即root對象是Figure的父對象,它又是2級對象的爺爺輩。你可以利用get(0)在command窗口裏獲取root對象的屬性。
在這裏插入圖片描述
可以看到裏面有許多的屬性,其中比較重要的是callback,children,handlesvisibility,而屏幕尺寸則是因電腦而異,由於我的電腦是mac所以它就顯示1440*900每臺電腦都不一樣。

生成一個窗口

其實guide就是幫忙生成了一個窗口,即.fig,而實際上你自己也可以生成一個figure,下面的帶面便是:

 h = figure('menubar','none',...
   'NumberTitle','off',...    
   'Name','20177740--neverland的課程設計',...
   'Position',[300 120 1000 680],...
   'tag','figure1');

h即是figure對象,第一行是去除了工具欄,第二行便是使得標題上面的figure標號給刪去(強迫症使然),第三行就是你的figure對象的名字,第四行是位置其實這個矩陣的四個參數分別爲1,2是起始點的(x,y)座標,後面2個參數是矩形的長和寬。另外控件的位置也是那麼定下來的。
在這裏插入圖片描述
利用代碼生成的figure窗口,這就是一級對象,同樣你也可以利用get(對象名)來獲得它的名稱。
如果想在命令行窗口顯示它,利用figure(序號)就行,這個序號常常是tag屬性來存儲的。

生成一個控件按鈕

控件其實就是一個ui objects我們常用的主要有uicontrol、uimenu,當然還有uitab.第一個uicontrol有很多類型主要是通過’style’來實現的.
在這裏插入圖片描述
這裏面的style比較常用的就是都比較常用,具體的可以自己嘗試嘗試。
下面利用代碼生成一個edit可編輯文本框來並且來往裏面添加‘’值‘’

a = uicontrol('Style','edit',...
              'Visible','on',...
              'FontSize',20,...
              'Units','pixels',...
              'Position',[100 100 200 200],...
              'Parent',h)

在這裏插入圖片描述
於是生成了如下的控制按鈕,這是個文本編輯的按鈕
plus:如果對對象屬性不太熟悉的話也可以按Tab鍵來自動填充,當然你需要大概知道這些是做什麼的。
好了接下來就可以填入數值了。
填入數值有兩種方法,我比較常用的是set

a.String = 20  
set(a,'String',20)

兩種方法都可以往裏面填入數值,文本框裏面的string可以填入數值型也可以填入文本型的,當時不能填入字符變量sym型,之前幫同學debug的時候利用vpa爲了顯示結果把原來的double變成了sym填入不了文本框。
在這裏插入圖片描述
這裏解釋一下爲什麼兩種方法,其實Matlab存儲的時候把變量定義成了一種結構體,結構體裏面可以存儲很多東西,如果願意,你給變量存儲爲阿貓阿狗都行,結構裏面的字段取什麼都行。而控件其實就是個結構體變量,裏面有許多比較常用的屬性罷了。(下篇文章也將創造axes座標軸來顯示圖像)
稍微基礎性的寫完了,下一篇寫一個利用調用庫函數顯示圖像邊緣的ui。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章