乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MATLAB GUI新手備忘錄

       zele 2010-11-21
        MATLAB GUI新手備忘錄 收藏
      1、從最簡(jiǎn)單的開(kāi)始
            編程 最基本的目的 就是——我執(zhí)行一個(gè)操作,程序 做出一個(gè)反應(yīng) 。
             “一個(gè)操作”包括:點(diǎn)擊 鼠標(biāo),拖動(dòng) 滑塊,填寫 數(shù)據(jù) ,選擇 選項(xiàng)……
      “做出一個(gè)反應(yīng)”包括:計(jì)算 一些東西,然后儲(chǔ)存 在哪里,或者貼個(gè)圖 出來(lái),或者顯示 在哪里……
      -------------------------------------------------------------------------------------------------------------------
            編程的基本思想 :
            目的->當(dāng) 點(diǎn)擊按鈕A時(shí) , 然后執(zhí)行 任務(wù)C,
               則->進(jìn)入按鈕A的回調(diào)函數(shù) callback里,寫下任務(wù)C的代碼 。
      -------------------------------------------------------------------------------------------------------------------
           a:不知道callback在哪 ??右鍵單擊按鈕,view callbacks->選擇callback)別的控件也一樣。
           a:不同的回調(diào)函數(shù)啥意思 ??
             callBack
              最常用的就是它。如果控件是按鈕,那點(diǎn)擊按鈕時(shí) ,則按鈕下的Callback就會(huì)執(zhí)行;如果是滑塊,則拖動(dòng)滑塊 時(shí),滑塊名下的callback就會(huì)執(zhí)行;總之,就是對(duì)控件默認(rèn)操作 時(shí),matlab后臺(tái)就會(huì)自動(dòng)調(diào)用 它名下的的callback。正常用途,全放在callback下就夠了。如果其他的,實(shí)在是想知道,了解一下也未嘗不可。
             ButtonDownFcn
             就是鼠標(biāo)在它(代指各種控件)上面點(diǎn)擊一下,你放在這個(gè)函數(shù)名下的代碼就會(huì)執(zhí)行。(ps:按鈕的callback也是點(diǎn)擊,所以會(huì)覆蓋掉這個(gè)buttondownfcn。)
              CreateFcn
              顧名思義,在生成這個(gè)控件,顯示之前,執(zhí)行你放在這個(gè)函數(shù)名下的代碼;
              DeleteFcn
              一樣。在控件要銷毀,但是被毀滅之前執(zhí)行這個(gè)函數(shù)名下的代碼。貌似“真的要退出嗎”這一類就是寫在這里。
              KeyPressFcn
              當(dāng)前控件獲得焦點(diǎn)且有按鍵按下時(shí)執(zhí)行。(什么是焦點(diǎn)?就是這個(gè)控件被鼠標(biāo)點(diǎn)了(或者是tab輪選到了)。你打開(kāi)一個(gè)記事本,然后再點(diǎn)這個(gè)網(wǎng)頁(yè),再隨便按幾個(gè)按鍵,記事本上有字不?沒(méi)有對(duì)吧。因?yàn)樗鼪](méi)獲得焦點(diǎn),所以你的按鍵它不會(huì)反應(yīng)的。只有你最后再點(diǎn)它一下,再按幾個(gè)按鍵,結(jié)果 怎么樣?有字了吧?)這里的KeyPressFcn也是一樣的道理。
      一般在這下面的代碼還會(huì)判斷下按鍵是什么,然后執(zhí)行相應(yīng)的代碼。
               ResizeFcn,SelectionChangeFcn 不常用。也懶得去看了。附幾句,控件都有Resize的屬性,好像默認(rèn)是不可調(diào)整,如果要用到這個(gè)函數(shù),去把它打開(kāi)先。
             SelectionChangeFcn
             是在群按鈕 組件中,改變選擇時(shí),所執(zhí)行的函數(shù)。
              哪些控件支持哪些回調(diào)函數(shù) ?很簡(jiǎn)單,你在它上面右鍵就可以看到了,點(diǎn)進(jìn)去就可以編輯了。
             可以在property inspect中在需要的回調(diào)函數(shù)下設(shè)置 %automatic就可以自動(dòng)添加相應(yīng)的回調(diào)函數(shù)框架 。
      2、常用控件代碼框架參考
      ---------------------------------------------------------------------
      Toggle Button 的callback一般寫法
            toggle button是什么?設(shè)計(jì) 面板上,左邊那一欄圖標(biāo),看到它名字了吧?沒(méi)看到?File->preference->GUIDE->把那個(gè)show names那一欄勾選上。好了,可以看到了吧 。知道是什么了吧?
           拖進(jìn)來(lái),雙擊它,看到它的屬性設(shè)置表。上面各種各樣的屬性,以后有時(shí)間 慢慢研究。
           點(diǎn)下它時(shí),它默認(rèn)value ='Max'
            不點(diǎn)下它時(shí),它value='Min'
      --------

      代碼:
      functon   togglebutton1_callback(hObject,eventdata,handles)
      %這一句,現(xiàn)在不用管。自動(dòng)加的。 
      %%%以下是一般代碼
      button_state = get(hObject,'Value') 
      %控件甲的callback下面hObject就是控件甲,同理控件乙callback下的hObject......
      if button_state==get(hObject,'Max')
          %則怎么怎么怎么
      else if button_state==get(hObject,'Min')
           %則怎么怎么怎么
      end
      --------
      備注:button_state隨便取的變量 名,存放按鈕的選擇狀態(tài),別以為它是什么喔。
                 如果你的button甲是放在一個(gè)buttonGroup里面,則button甲callback下的代碼就要挪到buttonGroup下面去。因?yàn)閎uttonGroup的回調(diào)函數(shù)會(huì)覆蓋掉它成員的回調(diào)函數(shù)。
      ----------------------------------------
      Radio Buttons  
      ------
      代碼:
      右鍵點(diǎn)選你的Radio按鈕,進(jìn)入編輯callback
      function ………………略
      if(get(hObject,'Value')==get(hObject,'Max'))
         %被選中了,你想怎么樣
      else
          %不被選中,你想怎么樣
      end
      -----------------------------------------
      Check Boxes
      -------
      代碼:
      if(get(hObject,'Value')==get(hObject,'Max'))
         %被選中了,你想怎么樣
      else
          %不被選中,你想怎么樣
      end
      ------------------------------------------
      Edit Text
      -----------
      代碼:
      function edit1_Callback(hObject,eventdata,handles)
      user_string = get(hObject,'String');    %就得到了所輸入 的字符
      %因?yàn)閙atlab是把所有的輸入當(dāng)作字符來(lái)看待,如果你是期望的到輸入的數(shù)據(jù)的話,則:
      user_entry= str2double(get(hObject,'String'));     這里進(jìn)行一個(gè)數(shù)據(jù)類型轉(zhuǎn)換??春瘮?shù)名就知道了。
      if isnan(user_entry)         %nan就是not a number的簡(jiǎn)寫。知道這個(gè)函數(shù)意思了吧?
           errodlg('You must entry a number value','Bad Input','modal')      %跳出一個(gè)對(duì)話框。
      end
      %正確得到了數(shù)值,以下輸入你的其他代碼
      ----------
      附: 'Bad Input'是指窗口樣式,就像我們?cè)诓僮飨到y(tǒng) 下,經(jīng)常會(huì)跳出一個(gè)黃色感嘆號(hào)的對(duì)話框,或者一個(gè)紅叉的對(duì)話框;
              modal是指窗口類型,就像一些程序跳出警告對(duì)話框,我們什么也不能做了,只能把那個(gè)對(duì)話框選擇一個(gè)是或者不是,才能繼續(xù)做其他事情。這種對(duì)話框就是modal類型。而通常的比如瀏覽器的界面 ,我們打開(kāi)后,可以不管,然后打開(kāi)別的對(duì)話框,這種就是非模態(tài)對(duì)話框。
           
             默認(rèn)在點(diǎn)擊你的界面菜單欄或者界面上的其他組件后,這個(gè)edit text的callback都回被執(zhí)行一遍,所以在你點(diǎn)確定按鈕的時(shí)候,edit callback下讀到的數(shù)據(jù)會(huì)更新的了,不用擔(dān)心!
      ---------------------------------------------------
      Sliders
      ---------
      代碼:
      function slider1_callback(hObject,eventdata,handles)
      slide_value=get(hObject,'Value');%獲取滑塊當(dāng)前值
      %別的代碼
      ----------
      附: 它的Max Min 屬性設(shè)置了滑竿的最大最小范圍值。
      ---------------------------------------------------
      List Boxes
      -----------
      代碼:
      function ........
      index = get(handles.listbox1,'Value');  %listbox1是你自己的那個(gè)控件的tag名字
      file_list =get(handles.listbox1,'String');   %得到了你的listBoxes的列表
      file_name = file_list{index};
      %得到了所選擇的項(xiàng)目名,一下寫自己的代碼
      -------------------
      附:
             此 callback在鼠標(biāo)在這個(gè)控件上松開(kāi)或者特定的鍵盤按鍵松開(kāi)(看你怎么設(shè)置它的別的屬性的了)時(shí)候執(zhí)行。
            默認(rèn)鍵盤上 下 鍵可以改變它的值同時(shí)執(zhí)行一次callback。而enter和space不改變它的值,只是執(zhí)行callback
      Max-Min 差值是0的話,表示只可以單選;1的話,表示可以多選。這個(gè)可以在他的屬性欄里設(shè)置
      ----------------------------------------------------------
      Pop_up Menus
      --------------
      代碼:
      function .......
      val=get(hObject,'Value')
      Switch val
      case 1
      %
      case 2
      %
      defualt
      ......
      end
      ----------------------------------------------------
      Button Groups
      ------------------
      代碼:
      function .......
      switch get(hObject,'Tag');
      %注意這里的hObject和別的不同,并不是指這個(gè)BUtton Group,而是指在組里面,被選中的那個(gè)控件
      case 'radio button1'   %按鈕1的tag
           %。。。。。
      case '按鈕2的tag'
          %。。。。。
      。。。
      end
      ----------
      附:所以在這里,如果要拿到button groups本身的話,就用handles.它的tag名  中間一個(gè)點(diǎn)。
      --------------------------------------------------
      Axes
      -------------
             它是用來(lái)畫(huà)圖 的,可以說(shuō)是一塊畫(huà)布。它并不算是嚴(yán)格意義上的控件,但可以讓用戶在它的區(qū)域上點(diǎn)擊或者移動(dòng)鼠標(biāo)時(shí)(看你是放在什么callback下了)執(zhí)行一定的代碼。那就要加它自己的callback函數(shù)了。
             下面用來(lái)一般功能,所以不用自己的callback,代碼都是寫在別的控件回調(diào)函數(shù)下。
      代碼:
      axes (handles.youraxesname);%選擇你的一個(gè)axes,自然,用它的tag來(lái)選中它
      plot (x,y);  %這時(shí),所畫(huà)的圖就到它上面了
      set(handles.youraxesname,'XMimrFrick','on'); %順便設(shè)置一下它的屬性
      grid on; %加上網(wǎng)格
      --------------------------------------------------
      Active控件
      還沒(méi)時(shí)間去研究。這個(gè)是最好用的,因?yàn)榭梢越栌脛e人的現(xiàn)成的東西,畢竟自己不是程序員,沒(méi)有必要編寫太多的代碼。一些通用的比如文件 存取對(duì)話框,視頻 放映之類的。
      可惜,我還沒(méi)時(shí)間去看。呵呵。
      3、怎么獲得和設(shè)置控件的屬性
           通俗的說(shuō),就是我怎么獲取 編輯框里的字符,滑塊現(xiàn)在的位置,pop up里被選中的選項(xiàng),如何控制 static text顯示我要求的信息
           控件的屬性當(dāng)然遠(yuǎn)不止我剛剛說(shuō)的。
           在你需要的地方插入以下代碼:
      設(shè)置:
           set(handles.你控件的tag,'要設(shè)置的屬性名','要設(shè)置的屬性值')
      獲?。?br>    get(handles.你控件的tag,'要獲取的屬性名')
          比如:set(handles.edit1,'string','hello world');

      help里可以看到所有可能有用的屬性
      MATLAB->Creating Graphical User Interfaces->Laying Out GUIs and Setting Properties->What Properties Do I Need to Set?

      4. 數(shù)據(jù)怎么在不同的控件之間傳遞
           知道了GUI的數(shù)據(jù)管理規(guī)則,這個(gè)就很簡(jiǎn)單了。
      -------------------   
      先看在一個(gè)GUI界面內(nèi)部的傳遞的數(shù)據(jù)   
           每一個(gè)控件的回調(diào)函數(shù)頭:
          function myc_Callback(hObject, eventdata, handles)
         
           第一個(gè)參數(shù)是hObject ,是跟這個(gè)callback所關(guān)聯(lián)的控件的handles,在它自己的callback下,可以用代號(hào)-> hObject 來(lái)調(diào)用它。。不用管那么麻煩的概念,只用知道,控件自己的回調(diào)函數(shù)調(diào)用自己的屬性,只用hObject.屬性名   就可以了(中間一點(diǎn))。
           第二個(gè)參數(shù)是MATLAB的保留參數(shù)
           第三個(gè)handles ,是這個(gè)GUI界面的代號(hào)??梢酝ㄟ^(guò)它獲取這個(gè)界面的所有信息。所以在控件A自己的回調(diào)函數(shù)中,要獲取或者設(shè)置別的控件的屬性,就用  handles.別的控件Tag.屬性 
      ------------------------------   
           handles hObject 都是結(jié)構(gòu)體。正常的編程概念。
          handles格式是一個(gè)存放數(shù)據(jù)的缸??丶膆andles是小缸,它的名字叫做hObject;GUI界面的handle是一個(gè)大缸,并且這個(gè)缸名字也叫做handles;大缸里存放了所有的小缸和所有用戶數(shù)據(jù),你只需 handles.控件A的tag  就可以存取控件A的信息。
           那我怎么把自己計(jì)算出或者別的什么數(shù)據(jù)放到這個(gè)缸里呢?
           ^_^ 在任何地方  
           handles.自己的變量名 = 某些值     (其實(shí)也就是給結(jié)構(gòu)體添加成員變量)
           這樣你就定義了自己的變量。
           在任何地方
          b=handles.自己的變量名      (結(jié)構(gòu)名加點(diǎn)號(hào)來(lái)引用成員變量)
           就可以得到這個(gè)變量值,同樣也可以修改它。
           別忘了使用
            guidata(hObject, handles);( 不用改,直接黏貼)  在函數(shù)末尾來(lái)保存你對(duì)handles和hObject的操作 。(不然你自定義的變量就沒(méi)了)
      -----------------------
      5、在不同GUI之間傳遞數(shù)據(jù)
      -----------這部分是以前寫的我發(fā)現(xiàn)我的理解有些問(wèn)題---所以我現(xiàn)在傳遞數(shù)據(jù)用的application data的方法,沒(méi)用這個(gè)-??赡苓€沒(méi)理解透output的函數(shù)作用------------------------
        傳入
          那就來(lái)看打開(kāi)一個(gè)GUI界面時(shí),傳給他的參數(shù)有哪些 。
          
           function mygui_OpeningFcn(hObject, eventdata, handles, varargin)
                        所有的啟動(dòng)參數(shù)都是通過(guò)varargin 傳到它的OpeningFcn里面的。那啟動(dòng)參數(shù)可以是哪些呢?
          
          1、figure,也就是窗口參數(shù) 。
               比如說(shuō)position之類
               例如:打開(kāi)這個(gè)GUI時(shí),使用這個(gè)命令  mygui('Position',[434 234 234 34]) 則表示打開(kāi)窗口在這個(gè)位置;還有哪些可控屬性可以查help。
           2、自定義參數(shù) 。
             如果傳入的參數(shù)不是figure的屬性(matlab查找不到你輸入的屬性名),則你輸入的參數(shù)作為一個(gè)向量存放在varargin里面。
             比如mygui('路人甲','80‘),那varargin{1}存放了'路人甲',varargin{2}=’80‘
            
           那mygui中對(duì)這讀取兩個(gè)數(shù)據(jù)進(jìn)行反應(yīng),就達(dá)到了傳入?yún)?shù)的目的。
        傳出
            那怎么把數(shù)據(jù)傳出來(lái)呢?
            將你要輸出的數(shù)據(jù)存在handles.output里面
           在GUI任意地方
                    handles.output=數(shù)據(jù)1;
                    handles.secend_output=數(shù)據(jù)2;
           然后在GUI的outputFcn里面加上
                   varaginout{1}=handles.output;
                   varaginout{2}=handles.secend_output;
      這樣就把數(shù)據(jù)傳出來(lái)了。
      看每一個(gè)GUI的最外層的那句
           function varargout = mygui(varargin)     看輸入輸出,就是這樣了。把GUI本身就是一個(gè)函數(shù),
              b=mygui(一些傳入的參數(shù))   就執(zhí)行GUI并返回結(jié)果
              則b就得到了傳出來(lái)的結(jié)果。

      本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/aldenphy/archive/2010/07/24/5757311.aspx

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多