|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1 y& S1 ~9 v+ ~图形用户界面(Graphical User InteRFace,GUI):
5 R. @4 o" `2 g9 @用户与计算机进行信息交流的窗口。6 Y/ d v, s9 o+ `- e5 N
+ P( G' l G9 M0 c& T3 T5 h
设计图形用户界面的方法8 F/ |; d3 v0 K$ z
调用建立用户界面控件的函数
$ c$ I+ M- k A& f- L使用MATLAB提供的GUIDE工具进行可视化设计
+ C5 s7 g# c ]' [$ K/ g0 s' }+ O* T5 A9 Q" |* \& n
控件对象及其操作4 N# ^, E# m$ v
(1)常用控件
; c8 d. I8 ^% f" [+ J输入和输出类控件:编辑框、静态文本、列表框、滑动条等。
5 Y1 n m7 p* e) w! o) p实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等 k7 I1 [ ~: B0 f2 m, q
(2)建立控件对象
& t7 \8 [4 n, y7 I0 w+ T n8 }函数uicontrol用于建立控件对象,其调用格式为:
7 T9 f# M4 I* y9 `8 g4 Z
' [0 C0 D O! c5 ~) C句柄变量=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…)
$ U5 Q! t8 C" P$ i( E4 x8 V
* t# m: s A' \5 w; E: U其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认
. g0 Y/ _5 S5 b# s1 f' B) {在当前图形窗口建立控件对象。
& L E% ~3 {+ F3 [
! v$ Y Y8 X% |. a) M8 e6 w+ a(3) 控件对象的基本控制属性4 y/ i. L) \$ V* ~ o" y
Style属性:定义控件对象的类型,例如‘pushbutton’表示按钮对 象,'edit’表示编辑框,等等。1 h! O7 }7 z2 Q# U7 |
String属性:定义控件对象的说明文字。
. \" v3 a5 j$ `, E, |; _* dTag属性:标识控件对象。" \: e( M1 I+ B) o
Enable属性:控制控件对象是否可用。, @2 p, S8 N; L( K6 n
Position属性:定义控件对象的位置,其取值形式为[x,y,w,h]。
/ A+ ^0 @* [( P2 eCallback属性:其属性值是描述命令的字符串或函数句柄,当选中控 件时,系统将自动执行字符串描述的命令或调用句柄所代表的函数, 实施相关操作。0 `$ D S& e; I0 U
(4)回调函数
" X l. d. z* b6 O/ W1 [5 c回调函数定义对象怎样处理信息并响应某事件。! u7 A! N G$ ~4 I
回调函数的定义格式:
& x. g$ F2 _, C7 _# Afunction 函数名(source, eventdata) …… end* ]0 { X' O& K, d/ N" ]$ h# U# M2 W
其中,参数source是发生事件的源控件对象句柄,eventdata存储事件数据。
7 p) d; Q' I" U1 w4 v5 E6 N0 k(5)例子1
- E' G8 \: e9 q9 d例1 在图形窗口中建立三个按钮对象,当单击按钮时分别绘制正弦曲 线、显示或隐藏坐标轴的网格、清除坐标轴的图形。; n4 U( Y# H0 B. q
5 K( C7 X M5 c/ W* ?$ l" A! S- 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& O7 }4 W Y: O0 g
, r8 w. d7 b; d9 ~
W6 \8 p7 X* d. ]菜单对象! V5 v+ l6 i" h6 Z4 n; S# d
(1)建立菜单对象, v0 X0 r4 f- o) Y9 v) U% W
uimenu函数用于创建、设置、修改菜单。
6 M: K, B5 r) r建立一级菜单项的函数调用格式为:
% q1 B0 j" m# N, V+ z一级菜单项句柄=uimenu(图形窗口句柄,属性,属性值1,属性2,属性值2,…)0 y# n0 y1 m; N! o, o
建立子菜单项的函数调用格式为:
" @4 m# l4 H( J* k* u A% v- {子菜单项句柄=uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,…) h$ Z9 }, |0 N7 C! X7 z
5 i8 j) T7 B' y# P" f9 X) c(2)菜单属性
3 }9 [ Q) M" I0 ?' F5 dLabel属性:定义菜单项的名字。4 |4 h) p4 }; c5 H# A& F7 T
Accelerator属性:定义菜单项的快捷键。
3 l `$ s: y8 V0 z9 WChecked属性:指示菜单项是否已选中。 s- c) ^0 B, c* t
Enable属性:控制菜单项的可选择性。9 |% j( c& \9 L E( j
Separator属性:在菜单项上方添加一条分隔线。8 w8 M' P$ l B' w( Y
4 i3 c2 E. Y" i! z3 j6 F* x; J# m' H F0 C
(3)例子2
' C: l9 d: O& ?* [, Q% f在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜 单项“线型”,其下又有3个子菜单项,分别为“实线”、“虚线”、 “双划线”。) `6 Q4 s5 j3 P- a0 s7 J0 O! A
- N+ V. i/ ?4 Y4 @: g3 h" T" U+ D- @ d首先运行例1的程序生成图形界面,再 运行例2程序,在界面中添加“图形选 项”菜单项,这时“线型”菜单项不 可用,单击“绘图”按钮绘制正弦函 数曲线后“线型”菜单项变为可用, 这时可以改变线型,例如双划线.
, |) N+ m4 p3 X/ @8 B/ n" z
; k2 g$ T3 V+ E) U3 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, |9 C* j% f+ M H+ F7 V
" q, f" s Q3 `( K) \6 n; U% W7 Z
$ s# O9 `6 v) |2 [本人觉得一些常用的函数
" J6 S' {6 Q# l/ E" l# q3 }
/ \, Y. m* N: G: Sgcf返回当前Figure对象的句柄值
) y* d$ E t9 f* v& X9 v4 B& J. A4 L6 u% P) p
h = findobj(‘PropertyName’,PropertyValue,…)
% t7 d ]5 h! f, y; |. G返回所有属性名为‘PropertyName’,属性值为’PropertyValue’的图形对象的句柄。可以指定多个属性/值对
: ?2 M6 R; o1 L8 M# I
; T5 u: }& J0 x& f( _1 M) Z6 p# P在当前坐标下查找所有直线对象:, i+ d, q( P( O: M: @ T
h = findobj(gca,‘Type’,‘line’) %gca为当前坐标的句柄$ x& ~ T d/ {+ C( b8 ?% C: \! }
4 {3 K7 C: M8 o$ [! s. `7 vmatlab自带用户界面设计工具GUIDE
$ M, L4 [! q9 @7 E" d8 k# XGUIDE:Graphical User Interface Development Environment7 G. v. o+ M' G1 E) I
) j0 J: G. d; L! K7 W图形界面设计窗口
% D; l* Y* |8 A5 _* i9 p/ f1 s# u6 c2 P- y9 h$ a
(1)打开GUIDE
* V% e( y- s, S" E; \! a在MATLAB命令行窗口输入guide命令。$ V) V1 s/ j- b8 ?" P
在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按
# E0 {) P, e* I7 t% A- G' {钮,再选择“应用程序”下的GUIDE命令- ^$ e+ B7 p+ G6 v6 L/ F
! b+ p: {2 M) }6 l* C9 X
(2)图形用户界面设计模板
- q7 N; [) S" U0 q) rBlank GUI (Default) R: G: N8 _5 X/ F
GUI with Uicontrols
0 ?7 |# u) ?6 \7 H+ \" rGUI with Axes and Menu
: M9 f5 q9 J6 J R- }Modal Question Dialog5 ?5 Y9 X, _( c6 U4 `$ I) G
" s9 W r4 |# s2 s# Y
(3)图形用户界面设计窗口' B s$ u% ?& s1 k
图形用户界面设计窗口由菜单栏、 工具栏、组件选项板、界面设计区、状 态栏等部分组成。
* ]( k( }& y( V$ i" C- j( F# S' ^0 N
! {5 ]0 M, Z4 O/ o- I(4)图形用户界面设计工具* O; C9 V( R/ P% R6 H
对齐对象工具
$ h" r! V0 y: w5 p$ K; m菜单编辑器. y( F1 E, I! C. d/ F
Tab键顺序编辑器# ^# i4 J) \2 ]+ q. A5 A
工具栏编辑器
' B2 F T6 o2 g代码编辑器0 x+ c, X3 S, x; P3 F$ k
对象属性检查器
! @( m% f8 I# G4 _对象浏览器
Z3 Q1 c3 U+ {7 P9 ~: J* ]( k
对象属性检查器是用于检查/修改对象属性的工具。9 Z! I6 [, ^. _2 q: O
( f% K$ r, `2 |9 p4 x- y7 K; x
菜单编辑器
( x! i% I! m( c' d5 o/ K菜单编辑器构成
0 o1 H m- T! l$ _# l; c工具栏
1 S' R2 N$ s- F ~, T菜单列表
& M: r' L& |4 d" ]菜单属性面板1 T' k* M/ r' C1 w: t1 r1 l1 I
图形窗口的MenuBar属性% J9 {8 H& S" b# w
figure
0 K0 g V4 m3 `+ H( ynone9 C& Z* R |4 O T+ i9 g
菜单编辑器 添加自定义菜单: \0 O {" V, W l8 B
新建菜单 新建菜单项 设置菜单项属性
0 l" g9 r X, J2 N! E% f8 x) q, u2 h& L
对象浏览器
4 d3 [& t' `) ], @0 Y对象浏览器用于查看图形对象和展示界面的组织架构
- H2 g' F/ {. X
" @- X/ z$ p. u- d6 L0 Q回调属性与回调函数
7 H: ]- S% L5 V5 d8 _$ U5 R2 a(1)回调属性
. f. ?- H1 h6 U1 j2 GCallback属性:按钮类控件和菜单项的单击事件的默认回调属性。 ^7 ~4 C4 |; Z, }3 x2 g. Y
CreateFcn属性:定义创建图形对象的响应。2 V" ^. C* c) c
DeleteFcn属性:定义取消图形对象的响应。, S* a1 L3 E: s$ g: b( k0 l- s
ButtonDowNFCn属性:定义单击鼠标键按下的响应。
$ n" p) x1 h7 r3 q3 ^# G# OKeyPressFcn属性:定义键盘键按下的响应。) J5 \4 a# N6 c- K0 H; J# a! @
SelectionChangeFcn属性:定义改变选项的响应% M3 ^+ V' q' d* a9 n7 W% r3 Y
2 x) C" U* w. p1 z9 L! g(2)回调函数框架. r2 n% N; l. x; c$ Q
function 对象标识_Callback(hObject, eventdata, handles)/ G4 g* J( \! ~8 V: I( K" J
其中,hObject为发生事件的源控件,eventdata为事件数据,handles保3 \" e9 r* A7 i+ M
存图形界面中所有对象的句柄。4 C& P, E5 _( f6 b: y+ H/ L, X1 o
h5 G- m6 K* o- P7 f i1 ]- %“绘图”按钮的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';: p, S h7 Z. }6 a3 u- U
2 `, N6 J0 k4 t( i" Q! z/ H
. I4 ]4 f# S2 A4 ^5 s6 q |
|