|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
! d) C$ D* z/ [+ g7 T1 y
图形用户界面(Graphical User InteRFace,GUI):
3 J n8 {2 C+ w2 L8 H' ~. Z用户与计算机进行信息交流的窗口。
! Q6 K @4 O+ F; K2 w
1 E8 _" b2 u( X) M1 p" Z设计图形用户界面的方法
; S- I* w2 L1 J, a调用建立用户界面控件的函数: l4 [% A4 ^1 T9 Q6 r5 p+ Q \+ @5 F
使用MATLAB提供的GUIDE工具进行可视化设计
9 M! c3 \8 F& s: G. K: S# I! P9 ~; u2 O) H+ ^% R# D
控件对象及其操作5 F% R) p: B! I
(1)常用控件/ v2 E6 h% q( ] Z8 A& @" \$ R
输入和输出类控件:编辑框、静态文本、列表框、滑动条等。% h; ~. m# n2 h3 d8 L2 o- O; ]
实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等9 n( U6 |3 b( U, X5 Q
(2)建立控件对象
, @7 @" N! Q! ?3 ^函数uicontrol用于建立控件对象,其调用格式为:
6 Q# w! T4 t- M. Q, C0 N' G3 x$ L3 z+ `6 Z" {
句柄变量=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…)
- S- L' r E& a# w; g* `8 _
9 L) |5 t0 `9 x其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认
- R2 m9 f5 {) f0 t! }4 j" V* ?在当前图形窗口建立控件对象。
. N, n" S5 Y/ l# q: W8 Z2 L: g: {9 z9 o
(3) 控件对象的基本控制属性
/ u$ C4 [5 z* U& [$ D" ]$ P+ Q9 _. PStyle属性:定义控件对象的类型,例如‘pushbutton’表示按钮对 象,'edit’表示编辑框,等等。, Y! N* [5 L( |9 t+ C+ _7 t
String属性:定义控件对象的说明文字。& d; M8 C0 ~5 r$ M
Tag属性:标识控件对象。
( B/ s- A& U G. k& {" `Enable属性:控制控件对象是否可用。/ i9 R$ e n7 R3 G: U& Y
Position属性:定义控件对象的位置,其取值形式为[x,y,w,h]。
/ S: c* D. i# |2 LCallback属性:其属性值是描述命令的字符串或函数句柄,当选中控 件时,系统将自动执行字符串描述的命令或调用句柄所代表的函数, 实施相关操作。
% y3 ~* |; s( k% Y(4)回调函数2 f$ @: P. S+ D+ r3 j& t
回调函数定义对象怎样处理信息并响应某事件。. k" a3 E: R, p' R
回调函数的定义格式: U* X, y5 |. c' I2 @# W8 F
function 函数名(source, eventdata) …… end. a: Y9 T% R7 I2 u- N5 Z1 A9 [0 q7 ~
其中,参数source是发生事件的源控件对象句柄,eventdata存储事件数据。* _* o% \1 Y- C
(5)例子1
9 q9 L& s# z0 m/ X F% k3 b! |6 L例1 在图形窗口中建立三个按钮对象,当单击按钮时分别绘制正弦曲 线、显示或隐藏坐标轴的网格、清除坐标轴的图形。
4 y$ v3 b& _6 z I9 Z* m) ~. c
% }9 u) G8 n' N8 U) M3 K" L- 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' K6 I% k7 z" P& l+ S
! U/ |5 ~. \" K
2 m7 N9 y- B5 H+ N1 r7 }0 O
菜单对象
0 X+ g( |0 v h(1)建立菜单对象
! I- Q! `* o; A y0 vuimenu函数用于创建、设置、修改菜单。! f0 x, l' J, ?2 F* k O
建立一级菜单项的函数调用格式为:
6 x) E; X- t& ~3 V) K" b" W一级菜单项句柄=uimenu(图形窗口句柄,属性,属性值1,属性2,属性值2,…)
8 ?9 h5 ]3 x# E$ h5 v建立子菜单项的函数调用格式为:
% s' h0 r2 a" j子菜单项句柄=uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,…)2 x1 t1 p8 _# M4 F2 C% j4 o% S
2 ?" m+ ?- B% {- Q(2)菜单属性$ Y4 ]7 Y! b' [+ d; X
Label属性:定义菜单项的名字。* [6 t2 Z: b m
Accelerator属性:定义菜单项的快捷键。; T/ @+ {* u" b+ ? f
Checked属性:指示菜单项是否已选中。" T% q! L5 B( E+ {# _, [( U
Enable属性:控制菜单项的可选择性。- g; q6 F4 F( H r& j
Separator属性:在菜单项上方添加一条分隔线。/ r# J( b/ K) C' D% V5 w
8 w% t% T# i% b) ]) M
(3)例子2& G# H% t0 _' N1 K
在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜 单项“线型”,其下又有3个子菜单项,分别为“实线”、“虚线”、 “双划线”。
' D: Z2 @' d2 x- ]! [3 r2 W J, f: n' ?+ b9 s1 d
首先运行例1的程序生成图形界面,再 运行例2程序,在界面中添加“图形选 项”菜单项,这时“线型”菜单项不 可用,单击“绘图”按钮绘制正弦函 数曲线后“线型”菜单项变为可用, 这时可以改变线型,例如双划线.
' @6 Y! [/ k4 k' E/ m2 ?# }
L' W9 v: {+ M/ C* S/ }2 L9 d! C- 新建一个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
( K. u8 G; S( U
# Z, ]7 \7 a* J
: `/ Z7 y$ K" A4 n+ \3 L9 z本人觉得一些常用的函数" n5 K4 N% q) m# p$ S
) ~# S( X, M8 {: L
gcf返回当前Figure对象的句柄值
4 j3 I; q) ^8 g8 E8 ]& E) ^9 ?, @3 T+ {! Z0 g% g
h = findobj(‘PropertyName’,PropertyValue,…)( J" |) }# W7 L
返回所有属性名为‘PropertyName’,属性值为’PropertyValue’的图形对象的句柄。可以指定多个属性/值对
: K( }5 @: K) J# d: P1 C
& u* m7 V' }. \ M在当前坐标下查找所有直线对象:
5 Y1 A3 m ?* b" N7 C4 bh = findobj(gca,‘Type’,‘line’) %gca为当前坐标的句柄$ b2 u1 f1 J0 w
( J* J3 `' m% ~* }8 q! \7 ?/ Q
matlab自带用户界面设计工具GUIDE4 r& X) i8 Q) D
GUIDE:Graphical User Interface Development Environment
" V% S# M& u6 v: r
6 {. @3 y% v8 D5 a, G! p7 l& j: R. K图形界面设计窗口
2 ~/ B( L3 F% z2 Q0 l5 ~& \ G+ s) ]: e1 k6 f. r' s
(1)打开GUIDE2 w0 X5 ]4 |# _
在MATLAB命令行窗口输入guide命令。
0 k' {/ x: D9 X在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按
8 m' |1 ?! q" F钮,再选择“应用程序”下的GUIDE命令* Z1 K6 n- t: W2 L
0 x# F" P3 S* \8 W+ ?( I5 w
(2)图形用户界面设计模板
, b/ n$ g3 U; s. V. ~Blank GUI (Default)
* h7 T: `9 v( I8 TGUI with Uicontrols% G; |$ h0 H! y2 M
GUI with Axes and Menu
! L _, K( e* lModal Question Dialog
2 {+ ^! g( E2 d J4 U: i/ R0 Y' j! U7 L
(3)图形用户界面设计窗口
. m+ `: r3 |8 \: K2 v图形用户界面设计窗口由菜单栏、 工具栏、组件选项板、界面设计区、状 态栏等部分组成。
8 n) S- h, d6 X+ s7 U8 u% l0 m: p4 R) W7 f8 U
(4)图形用户界面设计工具' y# i1 y: i: I7 e( O, |6 U0 ~; D. f) K
对齐对象工具
0 r/ f( e3 Y6 M' T' t* q菜单编辑器
$ |8 T& J$ W" T% b, f/ S. rTab键顺序编辑器
3 v6 O7 u3 \! s) K" x, M: h工具栏编辑器 k+ e! v0 N' R/ y6 N
代码编辑器. c) U* c, z# V* j# \+ K: Y
对象属性检查器
1 J# g4 a' O1 m' i对象浏览器) h- g1 |- n0 K0 k- T
5 u! f3 F, o, z8 U o! H对象属性检查器是用于检查/修改对象属性的工具。/ g7 \1 h/ H! s
* ]" p8 R+ T' a0 [3 K8 g
菜单编辑器7 G! @" M* j% o8 H, {1 ~
菜单编辑器构成
# F, ^/ ]& O% o P# d工具栏! r6 z1 j& [( W9 y8 r$ w
菜单列表
3 {2 j, Y6 A ?4 t菜单属性面板
. i: s" X6 W" k0 H; w w图形窗口的MenuBar属性
2 c( w3 V5 H* |. h' `figure
0 S- o1 t! u4 r b. wnone! \* T$ C% X1 q4 v! |8 G
菜单编辑器 添加自定义菜单9 l9 C' @+ e; C! y% W
新建菜单 新建菜单项 设置菜单项属性. l9 s) p4 t2 `3 H4 t+ v( Z+ u# M. [
( [6 j' o `/ E2 k6 M. a7 I1 `5 U对象浏览器
; j; i0 e$ x ?! K& l/ Q: m+ X j对象浏览器用于查看图形对象和展示界面的组织架构
4 a: u8 I N; [# l/ C- }* m; S
% w. P' e7 c) _& g. l回调属性与回调函数
& Z+ X8 X2 D' V8 U. j(1)回调属性$ \( Y$ o0 k6 {) S( F
Callback属性:按钮类控件和菜单项的单击事件的默认回调属性。* h6 X3 e1 }1 ?$ P6 b! m$ L
CreateFcn属性:定义创建图形对象的响应。
! {( Y4 f! B* z1 t: Z% HDeleteFcn属性:定义取消图形对象的响应。
+ M# f+ i$ a( ^* n0 I' ~# o3 SButtonDowNFCn属性:定义单击鼠标键按下的响应。& A' j4 I4 H7 |6 ^; Y9 @3 {! N
KeyPressFcn属性:定义键盘键按下的响应。. d+ A. U) ^& j! S% }! T
SelectionChangeFcn属性:定义改变选项的响应1 ?& [; U# n8 M* [
: L: M3 ?$ k( c0 Y1 ?
(2)回调函数框架/ K; S0 ?6 a5 B; m! `
function 对象标识_Callback(hObject, eventdata, handles)* E& U+ i2 ?$ n3 B1 P
其中,hObject为发生事件的源控件,eventdata为事件数据,handles保2 g; _* ]. a% O/ B/ n$ {
存图形界面中所有对象的句柄。4 Z/ H; {" l& q- [7 ]6 m
2 f3 i& K7 B" V! _+ r
- %“绘图”按钮的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';& F0 f5 e+ z. I' \( H9 r
{8 v' `3 ^" m* l7 m$ `
& h; E9 g, y# J9 o: e' T |
|