《MATLAB程式设计入门篇握把式图形与GUI设计》由会员分享,可在线阅读,更多相关《MATLAB程式设计入门篇握把式图形与GUI设计(25页珍藏版)》请在金锄头文库上搜索。
1、MATLAB 程式設計入門篇握把式圖形與 GUI 設計張智星 (Roger Jang)http:/mirlab.org/jang清大資工系 多媒體檢索實驗室MATLAB 程式設計入門篇:握把式圖形與 GUI 設計握把式圖形 (Handle Graphics)n基本概念n每一個構成圖形的基本單位都可視為一個物件 (Object),例如:n曲線、曲面、圖軸、文字n每個物件都有一個獨一無二的握把 (Handle),就像每一個人都有一個獨一無二的身份證字號n根據物件的握把,就可以存取圖形物件的所有性質MATLAB 程式設計入門篇:握把式圖形與 GUI 設計圖形物件的階層結構n圖形物件階層結構(Hier
2、archy)MATLAB 程式設計入門篇:握把式圖形與 GUI 設計階層結構的一個例子MATLAB 程式設計入門篇:握把式圖形與 GUI 設計圖形物件的性質存取n可以分兩種方法:n以 MATLAB 所提供的圖形使用者介面(GUI,Graphical User Interface)進行圖形物件的性質存取n以 MATLAB 命令列進行圖形物件的性質存取MATLAB 程式設計入門篇:握把式圖形與 GUI 設計MATLAB 的性質編輯器n先畫完圖,再使用 propedit 開啟性質編輯器,例如npeaks; % 畫出 peaks 3D 圖npropedit; % 開啟性質編輯器n若不在命令列下達 pr
3、opedit,也可以點選工具列上面的 圖示來開啟圖形編輯功能。MATLAB 程式設計入門篇:握把式圖形與 GUI 設計進行圖形編輯n啟動圖形編輯功能後,直接以滑鼠左鍵點選圖形物件(例如圖軸),然後點選右鍵選取所需要修改的性質,就可以達到修改圖形的效果。MATLAB 程式設計入門篇:握把式圖形與 GUI 設計圖形物件的性質存取n以命令列進行圖形物件的性質存取n set:設定某個性質的值 n get:取得某個性質的值n findobj:在握把式圖形的階層式結構中,找出您要的物件MATLAB 程式設計入門篇:握把式圖形與 GUI 設計set 範例set範例:hg02.mt = 0:0.1:4*pi;
4、y = exp(-t/5).*sin(t);h = plot(t, y); % h 為曲線的握把set(h, Linewidth, 3); % 將曲線寬度改為 3set(h, Marker, o);%將曲線的線標改成小圓圈set(h, MarkerSize, 20);% 將線標的大小改成 20MATLAB 程式設計入門篇:握把式圖形與 GUI 設計set 範例n單獨使用 set(h),可以列出 h 的所有性質,以及這些性質的可能值和預設值,例如:n h=plot(humps);n set(h, linestyle)MATLAB 程式設計入門篇:握把式圖形與 GUI 設計get 範例get範例:
5、get(h, LineWidth) % 取得曲線寬度ans =3; get(h, Color) % 取得曲線顏色 ans = 0 0 1 get(h) %列出 h 的所有性質的值MATLAB 程式設計入門篇:握把式圖形與 GUI 設計findobj 範例findobj範例: plot(rand(10,2); % 畫出兩條曲線 h=findobj(0, type, line) % 找出曲線的握把 h = 1.0051 74.0016 set(h, LineWidth, 3); % 經由握把將曲線寬度改為 3MATLAB 程式設計入門篇:握把式圖形與 GUI 設計MATLAB GUI 程式設計nM
6、ATLAB GUI 程式設計的兩種方式 nM 檔案 nGUIDE 發展環境 MATLAB 程式設計入門篇:握把式圖形與 GUI 設計M檔案nM 檔案的GUI 設計 nUicontrolnMouse Eventsn範例nxpsound、travel、truss、lorenz 等 MATLAB 程式設計入門篇:握把式圖形與 GUI 設計uicontrol範例1範例7-3:uicontrol01.mh = uicontrol; % 產生按鈕set(h, String, 請按我!); % 在按鈕表面加入文字請按我!cmd = fprintf(有人按我一下喔!n); ; % 定義按鈕被按後的反應指令se
7、t(h, Callback,cmd); % 設定按鈕的反應指令MATLAB 程式設計入門篇:握把式圖形與 GUI 設計uicontrol範例1MATLAB 程式設計入門篇:握把式圖形與 GUI 設計UI 控制物件nUicontrol產生UI (User Interface) 控制物件 n按鈕(Push Button)n滑動棒(Sliding Bar)n圓形按鈕(Radio Button)n框架(Frame)n核計方塊(Check Box)n文字欄位(Edit Box)n列表式選單(List Menu)n下拉式選單(Popup Menu)MATLAB 程式設計入門篇:握把式圖形與 GUI 設計u
8、icontrol範例2:uicontrol02.mclose all% 關閉所有圖形視窗uicontrol(style, push, position, 200 20 80 30); uicontrol(style, slide, position, 200 70 80 30); uicontrol(style, radio, position, 200 120 80 30);uicontrol(style, frame, position, 200 170 80 30); uicontrol(style, check, position, 200 220 80 30); uicontrol(
9、style, edit, position, 200 270 80 30); uicontrol(style, list, position, 200 320 80 30, string, 1|2|3|4); uicontrol(style, popup, position, 200 370 80 30, string, one|two|three);MATLAB 程式設計入門篇:握把式圖形與 GUI 設計uicontrol範例2MATLAB 程式設計入門篇:握把式圖形與 GUI 設計uicontrol的完整範例之一n另一個uicontrol的完整範例是 ui01.mMATLAB 程式設計入門
10、篇:握把式圖形與 GUI 設計uicontrol的完整範例之二nui01.m的潛在問題n需要使用三個檔案,管理不方便。n使用的變數都在 MATLAB 基本工作空間中,容易造成變數的相衝及覆蓋。n解決方案:使用Switchyard Programming的程式設計概念n範例:ui02.m(請仔細研讀!)ntag的使用MATLAB 程式設計入門篇:握把式圖形與 GUI 設計滑鼠事件 (Mouse Events)n主要滑鼠事件nWindowButtonDownFcn:定義滑鼠按鈕按下時反應指令nWindowButtonMotionFcn:定義滑鼠移動時的反應指令nWindowButtonUpFcn:
11、定義滑鼠按鈕釋放時的反應指令MATLAB 程式設計入門篇:握把式圖形與 GUI 設計滑鼠事件的使用n我們希望滑鼠先被按下,然後再移動滑鼠時,才會觸發移動時的反應指令。欲達到此效果,我們必須做下列事項:n在滑鼠按鈕被按下時,設定 WindowButtonMotionFcn 及 WindowButtonUpFcn 的值。n在滑鼠按鈕被釋放時,清除 WindowButtonMotionFcn 及 WindowButtonUpFcn 的值。n因此,只有在滑鼠按鈕被按下,且滑鼠在移動時,對應於 WindowButtonMotionFcn 的反應指令才會被呼叫。MATLAB 程式設計入門篇:握把式圖形與 GUI 設計滑鼠事件的範例n一個滑鼠事件 (Mouse Events)的範例:mouse01.m(請仔細研讀!)n MATLAB 程式設計入門篇:握把式圖形與 GUI 設計如何使用UserDatan在 Switchyard Programming 時,若要在不同的函數呼叫下存取相同的變數,有幾種方法:n使用UserDatan每一個圖形物件都具有的欄位n可用來儲存一些特定的資料n使用全域變數n好處:程式碼較簡短n壞處:較難偵錯