|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
/ A1 a7 t* K' v- Z& d
图形用户界面(Graphical User InteRFace,GUI):
' c: w) Y h6 a" ]用户与计算机进行信息交流的窗口。8 Q7 o8 i: ^) y$ A! U! {
^+ s" z P; K" o- {2 J) N8 {2 {' d设计图形用户界面的方法9 i! [. @ P$ q% m& l
调用建立用户界面控件的函数% \% Q0 F* o- G" f# _8 ]. ?. B* D
使用MATLAB提供的GUIDE工具进行可视化设计& O7 J4 e# T1 c. v1 M! W
, J' _6 Z h7 {$ Y1 v( H7 [. ?1 g6 H控件对象及其操作
; D4 h' W, G" h(1)常用控件 u7 x V* B2 P8 n
输入和输出类控件:编辑框、静态文本、列表框、滑动条等。, m9 F/ m, R5 B9 X) n% P
实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等
9 R2 U3 M4 L, ]+ e(2)建立控件对象8 [0 h. J7 v) H
函数uicontrol用于建立控件对象,其调用格式为:
6 E+ z' Y7 ]4 a0 a' H3 l) o: |
* @. T+ |+ U+ B/ Y- V; W( V/ h1 g# V句柄变量=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…)) A3 y7 D v6 ?- I
5 G* d/ I, T& ]. P, z) x0 |6 \/ G其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认" e, u: U" B0 _7 U( y8 k
在当前图形窗口建立控件对象。* @8 u' `' i/ @! C; M" G; u
- {" W0 f# b7 f) p$ ~5 y(3) 控件对象的基本控制属性2 X. B% v9 D, D) r/ c
Style属性:定义控件对象的类型,例如‘pushbutton’表示按钮对 象,'edit’表示编辑框,等等。
8 p4 |) O% j1 CString属性:定义控件对象的说明文字。
; N; e l6 A$ }% j2 F" ?6 M' ^, c6 qTag属性:标识控件对象。' ?+ g. A4 i& E# O4 M
Enable属性:控制控件对象是否可用。$ y3 O& a* b9 u1 _ M
Position属性:定义控件对象的位置,其取值形式为[x,y,w,h]。/ d0 _2 ~, h! ]2 N; t* T4 H2 F d
Callback属性:其属性值是描述命令的字符串或函数句柄,当选中控 件时,系统将自动执行字符串描述的命令或调用句柄所代表的函数, 实施相关操作。7 d2 o" s" O3 H+ p: {; G
(4)回调函数4 y7 B, A5 @, F
回调函数定义对象怎样处理信息并响应某事件。
" c% A# `6 u3 v6 f回调函数的定义格式:# d! v5 v V$ i$ `
function 函数名(source, eventdata) …… end
; q. S1 [" r* x8 w7 L, B& B其中,参数source是发生事件的源控件对象句柄,eventdata存储事件数据。
M5 o6 }- E9 p; q+ G$ q(5)例子12 \$ u: s) Y3 `9 @8 }
例1 在图形窗口中建立三个按钮对象,当单击按钮时分别绘制正弦曲 线、显示或隐藏坐标轴的网格、清除坐标轴的图形。
* P7 k2 Z7 Z4 A z0 m/ d) b) I' n8 D5 v8 E, p0 B3 Z) p
- 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函数句柄。
- btnplot.Callback=@plot_sin;
- %新建回调函数文件plot_sin.m
- function plot_sin(source, callbackdata)
- t=-pi:pi/20:pi;
- plot(t,sin(t));
- end
+ @ S: t' L) b- V. i* s$ v 1 D d, B3 f: X4 X3 c% ]7 ?3 s
* _( \* q0 V/ H) `9 j菜单对象
9 m! M# q1 {( _4 a" z7 m3 f(1)建立菜单对象
; E+ s& h D& j) e. J+ Vuimenu函数用于创建、设置、修改菜单。
! w5 K/ ?( R/ h7 P, m# P/ w建立一级菜单项的函数调用格式为:
9 e! E' A- K5 K7 Q$ |一级菜单项句柄=uimenu(图形窗口句柄,属性,属性值1,属性2,属性值2,…); j' z# U( T _4 }
建立子菜单项的函数调用格式为:9 x- U4 x, Y: E- p/ T( i$ }
子菜单项句柄=uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,…)
8 E& W" s: V5 p$ d% I. V
' p& M$ K) d% K/ H5 Q# W5 ^, g(2)菜单属性
9 u' y8 S7 `3 ~Label属性:定义菜单项的名字。
/ o- u4 t6 {2 WAccelerator属性:定义菜单项的快捷键。
5 s* i2 Q2 ]9 h( [Checked属性:指示菜单项是否已选中。7 \ O+ X0 Q! G9 K* z$ a
Enable属性:控制菜单项的可选择性。
* O a6 Z) | S7 ~5 ?" W1 v8 dSeparator属性:在菜单项上方添加一条分隔线。
0 N' x# K7 f: W, V9 n- e) [+ z/ Y% y$ @4 l4 x( [7 g- `: ~% v
(3)例子2
# X: |/ f- j& C2 {在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜 单项“线型”,其下又有3个子菜单项,分别为“实线”、“虚线”、 “双划线”。
% E7 _9 w& c2 |9 B7 q1 X7 @
3 b5 H$ o: d% z" k6 c; \首先运行例1的程序生成图形界面,再 运行例2程序,在界面中添加“图形选 项”菜单项,这时“线型”菜单项不 可用,单击“绘图”按钮绘制正弦函 数曲线后“线型”菜单项变为可用, 这时可以改变线型,例如双划线.
! x, L( C/ g) H% Q$ f6 O# ~5 l4 P. a- N: [; Q
- 新建一个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函数句柄。
- btnplot.Callback=@plot_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
9 y: H! U4 m" i" J/ [/ p / i/ n. C( p9 U2 d) s
9 r3 l# F$ G- N; I8 V7 w本人觉得一些常用的函数
( A7 b9 d* L, U7 p7 F3 \4 v0 k6 B& b3 ?* A) c9 F$ l
gcf返回当前Figure对象的句柄值
7 n' @' m' f, A2 x* H0 H
& }1 n. e7 v* i3 uh = findobj(‘PropertyName’,PropertyValue,…)
+ c! M# m/ Y. V6 N4 C) o- l返回所有属性名为‘PropertyName’,属性值为’PropertyValue’的图形对象的句柄。可以指定多个属性/值对
# X0 m/ L) j8 j: n' H1 T! S6 ?. P$ ^, l H
在当前坐标下查找所有直线对象:
$ b. y6 Q/ M' C) C7 |h = findobj(gca,‘Type’,‘line’) %gca为当前坐标的句柄2 R5 m% F- T* R) \4 @' i5 R, Z
' z) g, T' e! t% }1 S8 I* y
matlab自带用户界面设计工具GUIDE
( C k/ T/ }1 b) y; k7 cGUIDE:Graphical User Interface Development Environment2 c& l4 l% d1 D$ ]$ U0 W8 a
+ p; H) ^, u8 _2 a图形界面设计窗口
; P! n( @. A) Q$ T# p$ j
6 y# I, }' S1 t7 E(1)打开GUIDE
% d7 }' U7 z2 E& j5 D- c在MATLAB命令行窗口输入guide命令。5 ?6 N. ^$ I$ U9 @
在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按2 I1 Q [* i8 \' `- K5 x/ U a
钮,再选择“应用程序”下的GUIDE命令/ ^6 R$ N1 G3 X3 h
$ h* P7 _1 z: ~1 l5 S4 s(2)图形用户界面设计模板
F: Z s6 o3 b( y) s. t. E9 G' wBlank GUI (Default)" z! o! W6 B- i" H, _
GUI with Uicontrols& E+ l1 M6 F3 S4 Y+ w% M
GUI with Axes and Menu' J/ V$ E! P1 ~9 Y7 M
Modal Question Dialog
# o; X2 q3 Q5 x8 w/ x7 l7 }# T9 [; E: T! W& ?7 m5 G4 H
(3)图形用户界面设计窗口. m" l, j$ k& ?, `) H0 L% [. `: z# F
图形用户界面设计窗口由菜单栏、 工具栏、组件选项板、界面设计区、状 态栏等部分组成。
' n7 ~% `3 _/ B9 z2 E2 ?' y9 W: O$ E( Q C0 P; s( @
(4)图形用户界面设计工具: H- f& D4 j6 Z* g
对齐对象工具0 Y3 k) E {/ I( }; j2 z- U/ T
菜单编辑器
. B0 x0 @0 T, f. LTab键顺序编辑器5 D4 T. Z" M0 |! _0 L2 O* P
工具栏编辑器# q! C: a( |7 O% v$ p* K* O
代码编辑器
# G& s9 T- n4 p对象属性检查器8 V9 c) c% O& S
对象浏览器' ^2 f. E* |6 ^
~+ {% o7 k( G对象属性检查器是用于检查/修改对象属性的工具。- F/ D E* x4 M5 L0 L8 e
9 k: ^5 O6 c$ P/ g; E菜单编辑器
# u! l: l, D3 M! P6 G+ S菜单编辑器构成
" l8 W) h( r; I工具栏: {. U0 T# ]$ t) e5 x) ^
菜单列表
8 ?7 X+ @9 r. H8 d菜单属性面板
9 Y4 G+ O( x) l; Y* h图形窗口的MenuBar属性
+ i1 b3 u5 n5 |5 u& j! A5 z& ]figure3 y" ^% Y0 [# F6 R: L2 v, B
none, A# Q3 k- [* V. h! ^" F3 ]
菜单编辑器 添加自定义菜单
. n. b4 F% @. K新建菜单 新建菜单项 设置菜单项属性
& j+ j- C$ w9 H" v) u4 T3 ?: h* K4 d% V$ E, U& P, ]
对象浏览器
4 B* v% V7 ^6 x" @% k: [% D$ y对象浏览器用于查看图形对象和展示界面的组织架构
* O$ J- E# o# q! I% E. |% X+ ?
9 X! z; u+ C- G- j7 l回调属性与回调函数+ B3 ?, K$ g0 c. u( V
(1)回调属性5 H) A# n3 E. s" f
Callback属性:按钮类控件和菜单项的单击事件的默认回调属性。7 x( C, y2 z( Z: O5 j* ]
CreateFcn属性:定义创建图形对象的响应。5 D! w: O2 ]8 ?
DeleteFcn属性:定义取消图形对象的响应。
2 I, p, n2 [# E' s9 ?ButtonDowNFCn属性:定义单击鼠标键按下的响应。5 n) Y" G. a2 M. t3 c M3 N+ l
KeyPressFcn属性:定义键盘键按下的响应。
" Q+ {) r4 e9 G+ A' iSelectionChangeFcn属性:定义改变选项的响应
; g$ w! M, L" r
$ S2 r0 P7 K7 w w. ](2)回调函数框架
* b/ w) [# K' O$ Zfunction 对象标识_Callback(hObject, eventdata, handles)
/ f" _1 \* t% h4 o+ I6 S, {9 L$ d其中,hObject为发生事件的源控件,eventdata为事件数据,handles保5 F- C" N% m4 O
存图形界面中所有对象的句柄。
* a Q: W: S7 k$ V) \+ D# w' W
. X2 c; G. @6 r8 X4 y- %“绘图”按钮的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';
2 l. P: V( z* ~. B 3 K: O4 r; t* Y4 \+ Z
$ R, Y/ w: i+ z5 O0 y M
|
|