|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Q9 d7 M; [9 K C6 e
图形用户界面(Graphical User InteRFace,GUI):! x( L% F/ U# J. {; B
用户与计算机进行信息交流的窗口。
8 b. {: l9 b+ W$ |) }% H* {% s* B6 }
设计图形用户界面的方法# V1 o: }; K: K* y
调用建立用户界面控件的函数
) d F5 b$ T" ^& Y! O; Y$ x使用MATLAB提供的GUIDE工具进行可视化设计
- N9 ^5 v# U( x J5 o
1 ]8 T" F4 o; X0 F控件对象及其操作
7 J5 W" Y* U- f( ], J(1)常用控件( D+ {: p, s( b
输入和输出类控件:编辑框、静态文本、列表框、滑动条等。- Q; N# k5 q% D o/ b) O/ F O
实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等, J6 T' f# O! N% _! F$ k. c
(2)建立控件对象
* _# k7 l0 [; l' _# ?" J% c4 V函数uicontrol用于建立控件对象,其调用格式为:
$ G9 d0 y, g! d4 A. H0 Q/ ]( n# U' m
; A& t/ W2 r" s; b/ b1 D) K: v7 [句柄变量=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…)/ v7 o: V$ S) t. C
* j. N5 x: [( N0 k
其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认" J7 |$ F% y5 |6 Y
在当前图形窗口建立控件对象。" I) i( ]; u Z' s# R
+ o& O: |. t3 |(3) 控件对象的基本控制属性
* R6 z% c3 l+ dStyle属性:定义控件对象的类型,例如‘pushbutton’表示按钮对 象,'edit’表示编辑框,等等。
& K |7 {/ M D) ~% {) xString属性:定义控件对象的说明文字。
8 ?1 X0 e) k/ \4 K# j" ]1 WTag属性:标识控件对象。/ F, K; K1 C2 ^
Enable属性:控制控件对象是否可用。, S! \+ g. s1 N/ l. a8 U5 U" e9 }$ @
Position属性:定义控件对象的位置,其取值形式为[x,y,w,h]。
( `! e4 ^4 s9 oCallback属性:其属性值是描述命令的字符串或函数句柄,当选中控 件时,系统将自动执行字符串描述的命令或调用句柄所代表的函数, 实施相关操作。0 r. l7 g" L7 `, f2 a8 ~3 o
(4)回调函数4 E7 Z7 E8 U$ I$ x
回调函数定义对象怎样处理信息并响应某事件。- X7 x$ p& B+ }6 F. ~3 @, P; H
回调函数的定义格式:
G: \- R4 t' X( z6 q5 k. ~7 Ofunction 函数名(source, eventdata) …… end
7 P3 c- r, r. @9 F其中,参数source是发生事件的源控件对象句柄,eventdata存储事件数据。# G3 K! `" [% }) h6 U$ S' [# d
(5)例子1) o2 d! y# b7 S! K( Q1 [ v
例1 在图形窗口中建立三个按钮对象,当单击按钮时分别绘制正弦曲 线、显示或隐藏坐标轴的网格、清除坐标轴的图形。
: N* H+ @8 [5 f- S8 }$ _. ^6 O* w0 }7 v
- 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
|) m. l# W9 s( d3 W
( C3 I" H! o/ \" P2 B! s( X$ X+ H# Z8 l3 _$ B3 I, ~5 N- @
菜单对象3 k9 D; v* A" G5 t8 t& i# f
(1)建立菜单对象
- ~8 N4 g. T) l5 H+ K4 I8 Y) Uuimenu函数用于创建、设置、修改菜单。
; a& A( Y: {# m9 P" F w# p; r% r建立一级菜单项的函数调用格式为:# [6 s" F; b% G: S; r$ p' r2 ?% r: o
一级菜单项句柄=uimenu(图形窗口句柄,属性,属性值1,属性2,属性值2,…)7 C' t% r q4 A" M1 ^0 D
建立子菜单项的函数调用格式为:
% d C4 }/ `8 v, V子菜单项句柄=uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,…)$ _8 P4 P v3 t& g1 q
* P! I4 Y& }; E. S# G
(2)菜单属性
. ?% u0 @! O5 MLabel属性:定义菜单项的名字。
5 c3 Z& v+ _; w WAccelerator属性:定义菜单项的快捷键。# v [. N6 w! J) \( f
Checked属性:指示菜单项是否已选中。
7 Z; e9 o" |- G/ l5 [Enable属性:控制菜单项的可选择性。" W1 v3 s/ t$ y1 Q" Q7 E: ]0 @( V" j
Separator属性:在菜单项上方添加一条分隔线。
M2 B) H, F7 S8 G
' `" J7 H' [" j' T2 J' a$ U(3)例子2. D, D3 B2 t' X! I5 ~
在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜 单项“线型”,其下又有3个子菜单项,分别为“实线”、“虚线”、 “双划线”。- e7 p! y5 g! c( f* W
% Q- H! ~3 m2 {% u" K# E) z
首先运行例1的程序生成图形界面,再 运行例2程序,在界面中添加“图形选 项”菜单项,这时“线型”菜单项不 可用,单击“绘图”按钮绘制正弦函 数曲线后“线型”菜单项变为可用, 这时可以改变线型,例如双划线.
* Z6 J3 O$ u0 h
" c+ E4 G) x; W+ y \' y- 新建一个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" Y0 M$ ~% m, k' W5 Y* E# `
* O f6 Y0 O# Y5 K; t y" R1 F" s. ]1 O7 F
本人觉得一些常用的函数0 d* _" p. ^7 Z' b4 `
1 Q# i& @6 L1 D6 w
gcf返回当前Figure对象的句柄值( ~8 ]7 z# _$ n% h# X
! d! f+ A" M$ V, U, C8 B/ z
h = findobj(‘PropertyName’,PropertyValue,…)' \/ o( Q v' T# i4 k7 K
返回所有属性名为‘PropertyName’,属性值为’PropertyValue’的图形对象的句柄。可以指定多个属性/值对
+ L3 \0 e6 ]. O: z
2 S% ]0 F. V' d在当前坐标下查找所有直线对象:
+ ^8 A* R. b/ B# g. o$ sh = findobj(gca,‘Type’,‘line’) %gca为当前坐标的句柄( F2 B; m L# M7 M5 }' z5 P/ A
) S, w: p2 ?, G* g2 w# }matlab自带用户界面设计工具GUIDE
- o/ l6 ?6 @. m* k8 EGUIDE:Graphical User Interface Development Environment0 i! f6 f# k3 n1 z- S" A
" i7 K8 t0 d: C4 O2 N4 E图形界面设计窗口+ E9 @, I4 U3 s; J- e
, v7 m4 _: h1 e {( ?) n6 P. l8 u! S# t(1)打开GUIDE( g% [* r. k& x* H2 S
在MATLAB命令行窗口输入guide命令。
; k# J% J# O2 e# V7 G* Y* U* P) W在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按
6 `1 f, L# K7 d钮,再选择“应用程序”下的GUIDE命令
- e3 R, Q. ^. @# G+ @: m) G: j2 g; ]! p' D8 O3 g3 O2 f q: h
(2)图形用户界面设计模板
9 x& @6 I: ?/ R: a5 ~0 k" b' vBlank GUI (Default)
+ a5 N3 B, [: M" |0 P4 pGUI with Uicontrols( P0 {6 M% [ j# x
GUI with Axes and Menu
- h M3 h" E1 B; X% F% }Modal Question Dialog2 r1 I; ] d; W7 X8 {( e
( e$ V+ k) L5 p$ V(3)图形用户界面设计窗口2 H3 i- {) \6 y; ^1 i# P# Z* J
图形用户界面设计窗口由菜单栏、 工具栏、组件选项板、界面设计区、状 态栏等部分组成。' j: d9 F% C9 _9 B8 [9 j% u, H
2 t1 h% X1 u9 l% }
(4)图形用户界面设计工具
6 _& t% U8 M" m, [7 \对齐对象工具
% l: B/ A7 v5 L( B7 N菜单编辑器
+ Y1 H: s/ J( {, v# O+ v" xTab键顺序编辑器9 G0 ~% o$ y$ \3 p% C
工具栏编辑器) W. ^8 a3 f1 n% L* B
代码编辑器
+ q6 n) u4 @* T& l! L" Q* \7 R对象属性检查器
: o8 l( ?* l U& I' K% V5 J: f3 D0 e对象浏览器# Q2 H2 J0 e, d$ B7 a5 K4 l, m
3 @0 `1 H$ Q! N6 o对象属性检查器是用于检查/修改对象属性的工具。
( l/ P% u C0 R; m0 L5 }9 b/ l: ^- B4 }
菜单编辑器- g# g/ _4 B# @7 a
菜单编辑器构成2 R& U) T3 R/ b' e
工具栏' H0 R. y' {+ I4 P6 [& U
菜单列表4 H. c/ x/ d$ q& ^
菜单属性面板* v% a8 Y) C$ m
图形窗口的MenuBar属性- G6 w7 e+ M, ?' ^% J. q% U5 J8 B" K
figure
9 c6 s" M+ P ?none
8 v" i4 a9 P9 U f( I: g$ k菜单编辑器 添加自定义菜单3 o" J" O! k" b( C1 }+ X% d* z3 k
新建菜单 新建菜单项 设置菜单项属性
3 N2 c# b8 f+ K4 Z# ~# k. W' u$ h2 {; V6 h2 z) V2 G
对象浏览器1 Y/ Q1 y+ Z' e1 E
对象浏览器用于查看图形对象和展示界面的组织架构
: H j. I# P$ w5 I6 t& v& ]7 E
6 U6 w" b. w' p# B" p' X1 h" P9 H3 p4 n0 |回调属性与回调函数; t b% y+ P4 o4 t* G
(1)回调属性: z# f% Z' }$ t5 r
Callback属性:按钮类控件和菜单项的单击事件的默认回调属性。
' M, \( Y% o) r- P! b! w- H6 n/ ?CreateFcn属性:定义创建图形对象的响应。
) J- K- d8 R w8 J: r2 ~7 oDeleteFcn属性:定义取消图形对象的响应。
; p6 a9 X' F5 L% M, m2 m3 I yButtonDowNFCn属性:定义单击鼠标键按下的响应。
) h# B. f9 b2 H# |KeyPressFcn属性:定义键盘键按下的响应。
9 R* `6 S7 I& h+ L! x' E4 M. rSelectionChangeFcn属性:定义改变选项的响应
6 W' O3 Y4 b% `$ r6 K D, S1 r L# |( q
(2)回调函数框架% w& K! c0 i3 T
function 对象标识_Callback(hObject, eventdata, handles)5 M2 P- ^% c; O# e4 r* b
其中,hObject为发生事件的源控件,eventdata为事件数据,handles保
( `* n+ @7 o9 M& l, X存图形界面中所有对象的句柄。
B" P! D$ ^, Z1 g; c# P
% I3 f7 R( G( F. p- %“绘图”按钮的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';
% K( U, n5 m d$ j , v. k$ b& T3 j
* J# h4 r# W3 U! } |
|