|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
/ _5 @8 h! y# W( e+ K. R图形用户界面(Graphical User InteRFace,GUI):
1 \. o$ n; k( o' V用户与计算机进行信息交流的窗口。
3 Z( p9 J2 F7 i* l! c5 Y0 m+ s8 K0 O% k% h
设计图形用户界面的方法
! r, q1 Q9 `8 R7 z. \1 w' z/ b+ r2 ]调用建立用户界面控件的函数
) I$ ?8 k0 s2 k, L( j+ T Z使用MATLAB提供的GUIDE工具进行可视化设计
* F, D) g) E) H! T' l' a, A
* @4 s" w/ Q; F' y/ R控件对象及其操作
/ t# n+ S8 a. H! T(1)常用控件
# M/ @* v( g& Y+ |# A" Y. g, M) U输入和输出类控件:编辑框、静态文本、列表框、滑动条等。; F2 N! O5 {& R" a
实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等
& T) o5 z8 }& a$ H, q, h9 q(2)建立控件对象0 W: K. F' g: U+ ]
函数uicontrol用于建立控件对象,其调用格式为:
9 l) ^9 p4 {8 J* {* K8 G2 p x3 |- v2 T( G
句柄变量=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…)0 H* d) I( S6 K
; w' M, k( G. B9 k# R+ S
其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认( g0 }! j `) x V
在当前图形窗口建立控件对象。: t" g+ {; c( @* S! f& P0 \
! d6 H/ b$ g+ {; R8 d) Q) U
(3) 控件对象的基本控制属性
$ s8 ^# r4 o4 [( j, MStyle属性:定义控件对象的类型,例如‘pushbutton’表示按钮对 象,'edit’表示编辑框,等等。$ F2 u( F# z5 Q0 G/ P3 m
String属性:定义控件对象的说明文字。
; X, B& _) w; \/ oTag属性:标识控件对象。/ o3 m/ |7 _+ \ J! x( p
Enable属性:控制控件对象是否可用。8 A6 i" g& M6 T6 G8 ?0 h0 Z9 E+ C" ^
Position属性:定义控件对象的位置,其取值形式为[x,y,w,h]。, R* U% Y: R: r, S: A
Callback属性:其属性值是描述命令的字符串或函数句柄,当选中控 件时,系统将自动执行字符串描述的命令或调用句柄所代表的函数, 实施相关操作。
* `" W8 X/ }$ x' `(4)回调函数& P+ U% T( ^- J8 \8 ^
回调函数定义对象怎样处理信息并响应某事件。% b7 x: U, L$ V8 R) U7 U
回调函数的定义格式:2 `( ]; a# O& r' T" [/ f4 e
function 函数名(source, eventdata) …… end
+ j4 K, r! [7 R( ?其中,参数source是发生事件的源控件对象句柄,eventdata存储事件数据。
, C1 J0 Q8 v7 E/ L8 Q(5)例子1
' l1 T" l9 |- T% y例1 在图形窗口中建立三个按钮对象,当单击按钮时分别绘制正弦曲 线、显示或隐藏坐标轴的网格、清除坐标轴的图形。
( S4 ~ I& ?+ y; l
/ m5 L4 x) R7 q. |- 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' n7 s; W/ B1 T$ T& E
9 V3 F3 m4 D4 |+ m8 `! ?- v2 U: R% K" k: t. [
菜单对象5 O4 C+ B2 A8 Z) b
(1)建立菜单对象
: A) } `0 `* T4 Q2 l3 w- C6 muimenu函数用于创建、设置、修改菜单。
/ u9 B& N8 {& C. ]建立一级菜单项的函数调用格式为:% S4 G% e, j+ Q# }" Y+ K
一级菜单项句柄=uimenu(图形窗口句柄,属性,属性值1,属性2,属性值2,…)
% J. U# p0 D# I7 {建立子菜单项的函数调用格式为:
% E* i. \+ n% P6 y8 k# G子菜单项句柄=uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,…)+ b. J% N* ]$ C+ |4 ~! `; X9 G4 @
- R) \ l- w& p+ r V+ ]
(2)菜单属性
/ q8 c; D+ I5 K, B8 y; ELabel属性:定义菜单项的名字。/ |* Q# S' ?% q, v; v
Accelerator属性:定义菜单项的快捷键。
5 _9 g. w/ y: J7 H- f; n/ V; cChecked属性:指示菜单项是否已选中。
. W3 j, d! l* b! C6 {0 o% mEnable属性:控制菜单项的可选择性。
0 |! q; `. p/ K3 ~% ^# aSeparator属性:在菜单项上方添加一条分隔线。( Q% {6 i8 i9 c0 x
6 N: s3 J' Z( s! J4 q(3)例子2
) Y0 B( o5 ~4 A& C在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜 单项“线型”,其下又有3个子菜单项,分别为“实线”、“虚线”、 “双划线”。! X8 N7 {7 [ G$ N
& S1 c' k+ H- ~1 Y2 A8 Y: V; J
首先运行例1的程序生成图形界面,再 运行例2程序,在界面中添加“图形选 项”菜单项,这时“线型”菜单项不 可用,单击“绘图”按钮绘制正弦函 数曲线后“线型”菜单项变为可用, 这时可以改变线型,例如双划线.
2 l0 L$ q) e5 x' M1 l
3 L! h L$ h3 F. `- `- 新建一个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
% G: o, b0 y# V( y1 N3 y
# [ W% f, Z; n$ d" a; v4 h4 r, O+ ?/ T6 g' a$ t3 E* d
本人觉得一些常用的函数; ?( X0 g& w: T, E! y9 o
. d+ w9 O7 p1 g. k& `/ Mgcf返回当前Figure对象的句柄值
' B8 I$ H' [$ j8 i9 ^2 {' d) p: w/ b: a0 W/ y2 W
h = findobj(‘PropertyName’,PropertyValue,…)
$ ]1 l" |! E8 w; k2 n: ]* Y返回所有属性名为‘PropertyName’,属性值为’PropertyValue’的图形对象的句柄。可以指定多个属性/值对! K( L" V# t/ e+ p \
; M0 ]. \! m4 o7 c5 E
在当前坐标下查找所有直线对象:
2 ?$ L7 q @( N! r& O. A2 f. c/ bh = findobj(gca,‘Type’,‘line’) %gca为当前坐标的句柄2 _) C t1 o7 f9 P
1 S% m9 j5 I: {5 omatlab自带用户界面设计工具GUIDE
) A1 F3 S& H7 p1 j1 TGUIDE:Graphical User Interface Development Environment' h3 b* d7 c9 w3 N9 r
) n) d% Y r8 V" B! [图形界面设计窗口
) z% [. ~1 Q2 g- H2 j8 E% U# {" m: v/ X9 ^; S
(1)打开GUIDE$ [5 b% x) k/ j' u- d" m
在MATLAB命令行窗口输入guide命令。0 V8 i0 Q5 z, T* m/ C
在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按
' t1 Y% V" _) Y/ s+ |* j1 T钮,再选择“应用程序”下的GUIDE命令
! W! L- x8 v3 _+ n# A
; i2 u1 v" f; Q: F(2)图形用户界面设计模板- v7 H$ m; W1 o" t# z( ~
Blank GUI (Default)
, m3 l; V) O% _GUI with Uicontrols6 z( R. [! [& f, Z- F0 Z
GUI with Axes and Menu
/ z( |% W- L4 aModal Question Dialog
" b' ]( [: N9 U, ^% d3 F( J
4 \; u2 [. G# }+ m0 t4 D(3)图形用户界面设计窗口
6 Y6 x# B J* T3 x# n/ t图形用户界面设计窗口由菜单栏、 工具栏、组件选项板、界面设计区、状 态栏等部分组成。: w3 }% L. [3 O+ e
$ y# k3 U$ F) z: J# Q: s( H- ~: N
(4)图形用户界面设计工具$ ]: B: a- A; l- P
对齐对象工具4 Q o2 u8 p& n; B8 l% w* i
菜单编辑器5 t0 I6 X0 n- V- r3 n
Tab键顺序编辑器4 j7 ]: O8 P! E! X3 ]
工具栏编辑器
2 e" I7 Q7 ?# c% ?) A( `代码编辑器" {- p( V" k5 O: y% z& u3 j
对象属性检查器: e6 N7 d1 c, O
对象浏览器. f3 k+ i. j( l5 }% U
, j, n) i( m2 o
对象属性检查器是用于检查/修改对象属性的工具。
% Q* y/ I/ {5 ~
+ ^. o9 B) i6 O& M d7 d7 ?+ @6 ~菜单编辑器
* g" W9 N1 R- g! ^& _" l3 X$ \' G菜单编辑器构成* l( u% D- v* ^0 h+ w; n, o/ ?
工具栏! J6 @! J Y4 [& @
菜单列表
2 z3 c- f' x3 v) Q7 c) `菜单属性面板5 a1 O$ Q; a1 P0 y' b
图形窗口的MenuBar属性" a2 G0 v1 L- p
figure, i5 R4 q+ q* j
none* U/ {8 A/ l+ B0 w4 @0 K
菜单编辑器 添加自定义菜单
& e( u( ^, {- @+ `新建菜单 新建菜单项 设置菜单项属性
. r, k3 U2 B7 _2 N1 K; V" Y* E6 B' P. ^
对象浏览器
6 Y* S; F6 U% D& k1 I对象浏览器用于查看图形对象和展示界面的组织架构 f* _5 \) Z5 Q( u
/ y4 l/ S7 _1 h* Q
回调属性与回调函数
. W8 g* r x/ f% Z$ ^" O( }7 w(1)回调属性; [5 d, u: j2 T, a. f
Callback属性:按钮类控件和菜单项的单击事件的默认回调属性。
2 \/ [( G7 N6 P! g5 DCreateFcn属性:定义创建图形对象的响应。1 f9 [+ I( ^1 M6 f/ [" h$ k
DeleteFcn属性:定义取消图形对象的响应。
- w& J7 b( j3 D7 e9 F, r) l1 oButtonDowNFCn属性:定义单击鼠标键按下的响应。4 N; m3 i, H6 A. A
KeyPressFcn属性:定义键盘键按下的响应。/ J4 P( m }* n; k' G- z! ~, [2 z9 u9 h
SelectionChangeFcn属性:定义改变选项的响应' B$ L) u' E o7 ^, O2 J {
! u* k( h. m0 n: @. c- c+ H(2)回调函数框架 w! t( b. d! _* M2 k& `
function 对象标识_Callback(hObject, eventdata, handles)
8 U d3 i1 C# ?. L其中,hObject为发生事件的源控件,eventdata为事件数据,handles保
2 p5 E/ D* J! S, x存图形界面中所有对象的句柄。
+ N K' ~- y, |
4 E( J9 K: E) |( F- %“绘图”按钮的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';
7 H$ W9 Z k7 A' _ M / p4 k0 ~: J3 h, O) ?0 M: Q
5 k9 O9 t" D+ S$ s: @ |
|