matlab GUI 設計 自學筆記
圖形使用者介面(Graphical User Interface,GUI):
使用者與計算機進行資訊交流的視窗。
設計圖形使用者介面的方法
呼叫建立使用者介面控制元件的函式
使用MATLAB提供的GUIDE工具進行視覺化設計
控制元件物件及其操作
(1)常用控制元件
輸入和輸出類控制元件:編輯框、靜態文字、列表框、滑動條等。
實施確認、選擇操作類控制元件:按鈕、雙位按鈕、單選按鈕、複選框等
(2)建立控制元件物件
函式uicontrol用於建立控制元件物件,其呼叫格式為:
控制代碼變數=uicontrol(圖形視窗控制代碼,屬性1,屬性值1,屬性2,屬性值2,…)
其中,屬性及其取值決定了控制元件的特徵。若省略圖形視窗控制代碼,預設
在當前圖形視窗建立控制元件物件。
(3) 控制元件物件的基本控制屬性
Style屬性:定義控制元件物件的型別,例如‘pushbutton’表示按鈕對 象,'edit’表示編輯框,等等。
String屬性:定義控制元件物件的說明文字。
Tag屬性:標識控制元件物件。
Enable屬性:控制控制元件物件是否可用。
Position屬性:定義控制元件物件的位置,其取值形式為[x,y,w,h]。
Callback屬性:其屬性值是描述命令的字串或函式控制代碼,當選中控 件時,系統將自動執行字串描述的命令或呼叫控制代碼所代表的函式
(4)回撥函式
回撥函式定義物件怎樣處理資訊並響應某事件。
回撥函式的定義格式:
function 函式名(source, eventdata) …… end
其中,引數source是發生事件的源控制元件物件控制代碼,eventdata儲存事件資料。
(5)例子1
例1 在圖形視窗中建立三個按鈕物件,當單擊按鈕時分別繪製正弦曲 線、顯示或隱藏座標軸的網格、清除座標軸的圖形。
ha= axes('Units','pixels','Position',[40,40,360,360]);
ptgrid=uicontrol('Style','pushbutton',...
'String','網格', 'Position', [450,120,48,20],...
'Callback','grid' );
btncla = uicontrol('Style', 'pushbutton', ...
'String', '清除','Position', [450,80,48,20],...
'Callback','cla' );
btnplot = uicontrol('Style', 'pushbutton', ...
'String','繪圖','Position', [450,160,48,20]);
%設定“繪圖”按鈕的Callback屬性值是plot_sin函式控制代碼。
[email protected]_sin;
%新建回撥函式檔案plot_sin.m
function plot_sin(source, callbackdata)
t=-pi:pi/20:pi;
plot(t,sin(t));
end
選單物件
(1)建立選單物件
uimenu函式用於建立、設定、修改選單。
建立一級選單項的函式呼叫格式為:
一級選單項控制代碼=uimenu(圖形視窗控制代碼,屬性,屬性值1,屬性2,屬性值2,…)
建立子選單項的函式呼叫格式為:
子選單項控制代碼=uimenu(上級選單項控制代碼,屬性1,屬性值1,屬性2,屬性值2,…)
(2)選單屬性
Label屬性:定義選單項的名字。
Accelerator屬性:定義選單項的快捷鍵。
Checked屬性:指示選單項是否已選中。
Enable屬性:控制選單項的可選擇性。
Separator屬性:在選單項上方新增一條分隔線。
(3)例子2
在例1的介面中新增“圖形選項”選單項,其中包括一個二級菜 單項“線型”,其下又有3個子選單項,分別為“實線”、“虛線”、 “雙劃線”。
首先執行例1的程式生成圖形介面,再 執行例2程式,在介面中新增“圖形選 項”選單項,這時“線型”選單項不 可用,單擊“繪圖”按鈕繪製正弦函 數曲線後“線型”選單項變為可用, 這時可以改變線型,例如雙劃線.
新建一個m檔案第一次執行他
ha= axes('Units','pixels','Position',[40,40,360,360]);
ptgrid=uicontrol('Style','pushbutton',...
'String','網格', 'Position', [450,120,48,20],...
'Callback','grid' );
btncla = uicontrol('Style', 'pushbutton', ...
'String', '清除','Position', [450,80,48,20],...
'Callback','cla' );
btnplot = uicontrol('Style', 'pushbutton', ...
'String','繪圖','Position', [450,160,48,20]);
%設定“繪圖”按鈕的Callback屬性值是plot_sin函式控制代碼。
[email protected]_sin;
新建一個m檔案第二次執行他
hopt=uimenu(gcf,'Label','圖形選項','Accelerator','L');
hLStyle=uimenu(hopt,'Label','線型','Tag','LStyle', 'Enable','off');
hL_Solid=uimenu(hLStyle,'Label','實線',...
'Tag','Solid','Callback', @MLine_Type);
hL_Dotted=uimenu(hLStyle,'Label','虛線',...
'Tag','Dotted','Callback', @MLine_Type);
hL_Dashed=uimenu(hLStyle,'Label','雙劃線',...
'Tag','Dashed','Callback', @MLine_Type);
新建回撥函式檔案MLine_Type.m
function MLine_Type(source,callbackdata)
hline=findobj('Type','line');
if strcmp(source.Tag,'Solid' )==1
hline.LineStyle='-';
elseif strcmp(source.Tag,'Dotted' )==1
hline.LineStyle=':';
elseif strcmp(source.Tag,'Dashed' )==1
hline.LineStyle='--';
end
end
修改回撥函式檔案plot_sin.m
function plot_sin(source, callbackdata)
t=-pi:pi/20:pi;
plot(t,sin(t));
h1=findobj('Tag','LStyle');
h1.Enable='On'; %使得 “線型”選單項可用
end
本人覺得一些常用的函式
gcf返回當前Figure物件的控制代碼值
h = findobj(‘PropertyName’,PropertyValue,…)
返回所有屬性名為‘PropertyName’,屬性值為’PropertyValue’的圖形物件的控制代碼。可以指定多個屬性/值對
在當前座標下查詢所有直線物件:
h = findobj(gca,‘Type’,‘line’) %gca為當前座標的控制代碼
matlab自帶使用者介面設計工具GUIDE
GUIDE:Graphical User Interface Development Environment
圖形介面設計視窗
(1)開啟GUIDE
在MATLAB命令列視窗輸入guide命令。
在MATLAB主視窗中選擇“主頁”選項卡,單擊工具欄的“新建”命令按
鈕,再選擇“應用程式”下的GUIDE命令
(2)圖形使用者介面設計模板
Blank GUI (Default)
GUI with Uicontrols
GUI with Axes and Menu
Modal Question Dialog
(3)圖形使用者介面設計視窗
圖形使用者介面設計視窗由選單欄、 工具欄、元件選項板、介面設計區、狀 態欄等部分組成。
(4)圖形使用者介面設計工具
對齊物件工具
選單編輯器
Tab鍵順序編輯器
工具欄編輯器
程式碼編輯器
物件屬性檢查器
物件瀏覽器
物件屬性檢查器是用於檢查/修改物件屬性的工具。
選單編輯器
選單編輯器構成
工具欄
選單列表
選單屬性面板
圖形視窗的MenuBar屬性
figure
none
選單編輯器 新增自定義選單
新建選單 新建選單項 設定選單項屬性
物件瀏覽器
物件瀏覽器用於檢視圖形物件和展示介面的組織架構
回撥屬性與回撥函式
(1)回撥屬性
Callback屬性:按鈕類控制元件和選單項的單擊事件的預設回撥屬性。
CreateFcn屬性:定義建立圖形物件的響應。
DeleteFcn屬性:定義取消圖形物件的響應。
ButtonDownFcn屬性:定義單擊滑鼠鍵按下的響應。
KeyPressFcn屬性:定義鍵盤鍵按下的響應。
SelectionChangeFcn屬性:定義改變選項的響應
(2)回撥函式框架
function 物件標識_Callback(hObject, eventdata, handles)
其中,hObject為發生事件的源控制元件,eventdata為事件資料,handles保
存圖形介面中所有物件的控制代碼。
%“繪圖”按鈕的Callback函式
function pushbutton1_Callback(hObject, eventdata, handles)
A=eval(handles.editfz.String);
f=eval(handles.editpl.String)/50;
theta=eval(handles.editxj.String)/180*pi;
x=linspace(0,2*pi,60);
if handles.OpSin.Value==1
y=A*sin(f*x+theta);
else
y=A*cos(f*x+theta);
end
plot(x,y);
handles.PStyle.Enable='On';
%“實線”選單項的回撥函式
function Solid_Callback(hObject, eventdata, handles)
hline=findobj('Type','line');
hline.LineStyle='-';
handles.Solid.Checked='On';
handles.Dotted.Checked='Off';
handles.Dashed.Checked='Off';
%“紅”選單項的回撥函式
function r_Callback(hObject, eventdata, handles)
hline=findobj('Type','line');
hline.Color='r';
handles.r.Checked='On';
handles.g.Checked='Off';
handles.b.Checked='Off';