找回密码
 注册
关于网站域名变更的通知
查看: 583|回复: 2
打印 上一主题 下一主题

大神整理的matlab GUI 设计学习笔记

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-18 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

7 L: w" R7 e# g6 i9 |7 v图形用户界面(Graphical User InteRFace,GUI):
; L) ^$ y1 L" `( |' o+ E1 ~% h用户与计算机进行信息交流的窗口。
2 ?8 v: r" @! z, A% M# Y, Z% T3 r$ ^! q" L' |# ~2 z9 B6 M
设计图形用户界面的方法" c/ s& Z! J" c# ]
调用建立用户界面控件的函数) h- B6 B/ R* y0 R
使用MATLAB提供的GUIDE工具进行可视化设计" g( O" @8 ?6 G- H3 p

( m+ K. j% d' h. M$ j) M控件对象及其操作; Y" n8 F+ d. H( t1 ]/ ^
(1)常用控件! h# z+ i* ]& @
输入和输出类控件:编辑框、静态文本、列表框、滑动条等。, D7 I1 p6 o* b& e
实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等
  y, y! T" m" i7 J* q: X# R& `: R(2)建立控件对象
) S4 ^, i* d4 P7 x% i函数uicontrol用于建立控件对象,其调用格式为:7 I! g( g. a) w6 E

7 _% M5 S1 q3 Y( h% _  X8 W, L. x! T句柄变量=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…): E" C4 i' F& l' |" H% \# H
% W8 l$ P2 }$ K' G1 f$ i9 t3 C
其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认+ d" Z7 O& r; q( ?- _
在当前图形窗口建立控件对象。
' [! T' i5 ~  G" q  m  D
) i- b) Q1 L) W" L(3) 控件对象的基本控制属性* v" L" f. i1 c9 g/ R' z
Style属性:定义控件对象的类型,例如‘pushbutton’表示按钮对 象,'edit’表示编辑框,等等。
, B  e. A1 b0 e$ M* w( `String属性:定义控件对象的说明文字。" P8 E1 A0 k5 V, y2 |& |- x
Tag属性:标识控件对象。
  _* n9 C* g! j1 b% u6 zEnable属性:控制控件对象是否可用。9 V7 x5 s* r" t* V! g& K
Position属性:定义控件对象的位置,其取值形式为[x,y,w,h]。1 a) K; c. F) n. n  p
Callback属性:其属性值是描述命令的字符串或函数句柄,当选中控 件时,系统将自动执行字符串描述的命令或调用句柄所代表的函数, 实施相关操作。
3 G' U) H4 Z1 j' ~* \(4)回调函数) R' Y2 }& D$ J* _- G  D
回调函数定义对象怎样处理信息并响应某事件。: m. }2 V0 L5 u, x
回调函数的定义格式:4 o2 R) [/ A+ q! _5 S
function 函数名(source, eventdata) …… end' K1 Q% f& Y: b+ d5 M- [( i8 P8 f5 ~
其中,参数source是发生事件的源控件对象句柄,eventdata存储事件数据。
  J0 J$ c% e1 O* J(5)例子1* y! a$ T# j4 Q& o0 r
例1 在图形窗口中建立三个按钮对象,当单击按钮时分别绘制正弦曲 线、显示或隐藏坐标轴的网格、清除坐标轴的图形。
5 e$ w% m; w6 i" H( b1 n5 r& l3 E. ]# j' i- ^" a
  •   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
    1 y+ g/ r5 i& N/ G

+ s0 X8 S2 w5 D6 w# V
1 @! H2 G) R6 Z: M6 ^4 ]菜单对象# ?; P: y( I- L2 @% w/ O7 D
(1)建立菜单对象# {0 n: a* o1 X! o
uimenu函数用于创建、设置、修改菜单。& }1 ^  L0 P4 D( ~: ^
建立一级菜单项的函数调用格式为:
& c0 {: |8 v/ I; }# E一级菜单项句柄=uimenu(图形窗口句柄,属性,属性值1,属性2,属性值2,…)
/ n5 c! L3 o: s. G6 P! Y2 x/ |建立子菜单项的函数调用格式为:- C/ ~% B4 n% Y: k; m1 m
子菜单项句柄=uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,…)
0 J* B9 D9 ?. `& w; H  q0 ?' \8 k5 W
+ o, E/ W8 V) A5 C1 U8 X6 k- N7 i(2)菜单属性
) H0 u  u* |  I8 u9 k9 p( KLabel属性:定义菜单项的名字。' z1 f3 L: X6 w/ a  w# P
Accelerator属性:定义菜单项的快捷键。1 q  N3 a3 O) B4 p; F; m+ b" U: `
Checked属性:指示菜单项是否已选中。2 Q- ?2 b; h$ z
Enable属性:控制菜单项的可选择性。0 j) a# U( Q  |8 u, c* N  D
Separator属性:在菜单项上方添加一条分隔线。  V' D/ L. B& s6 Q
  a) p, D3 m; k  J- n- L/ `
(3)例子2* o7 {# Z0 t0 e5 U: D
在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜 单项“线型”,其下又有3个子菜单项,分别为“实线”、“虚线”、 “双划线”。# G! _, W1 s$ J9 r

4 S/ ]1 E" D% v. t$ ^( t! _+ h+ E首先运行例1的程序生成图形界面,再 运行例2程序,在界面中添加“图形选 项”菜单项,这时“线型”菜单项不 可用,单击“绘图”按钮绘制正弦函 数曲线后“线型”菜单项变为可用, 这时可以改变线型,例如双划线.
+ I  l. b5 x" X. f6 v2 f( s, y4 G7 X, E2 _1 N) 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
    ; X5 @3 n; [8 {6 T8 |
# D; v* x( M+ l6 H" {' b$ e
; ?" a" o& i  X/ ]
本人觉得一些常用的函数2 D' Q" q" X. l7 w+ i* A; U
: }4 e" d( Z, b0 O+ `; m$ q
gcf返回当前Figure对象的句柄值
1 P! w4 C/ Z7 e1 W
8 N" b: S4 |0 Z. }, p, X9 Eh = findobj(‘PropertyName’,PropertyValue,…)
1 Y5 k" ^/ r4 Y1 K( ^返回所有属性名为‘PropertyName’,属性值为’PropertyValue’的图形对象的句柄。可以指定多个属性/值对# I% f- y$ D9 b8 V% }: T/ S

& l# M4 y0 J- ^( F在当前坐标下查找所有直线对象:
2 g7 s% N( ?: X! z  m& \h = findobj(gca,‘Type’,‘line’)  %gca为当前坐标的句柄  O9 i: P( c5 X) a( _4 h
4 [) @% Q2 r: R4 s" y+ B- I
matlab自带用户界面设计工具GUIDE
. R3 N  ~! i" D+ ^* M7 N; J7 lGUIDE:Graphical User Interface Development Environment" L3 r9 {. D. [! r; u# a' A6 C
/ k, L2 J2 h0 \' [: G2 f, X$ l( y) S
图形界面设计窗口
+ r$ \' g8 Y) r2 B/ n( q% [. ^2 ^4 U) P
(1)打开GUIDE
6 R. b% w, E  _" o9 P在MATLAB命令行窗口输入guide命令。+ Y1 ?% H( L6 l  K  V3 W
在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按6 z8 p8 ?9 b* {$ Y5 K) p/ i
钮,再选择“应用程序”下的GUIDE命令7 N. Z/ n- Y* s( s- F' {- G9 a1 q( Z
' p- x% y$ i$ i  c: Q# I
(2)图形用户界面设计模板: y' b" s+ Q5 @- |8 q9 x
Blank GUI (Default)6 H7 a* R. O" R3 {; m" F4 t
GUI with Uicontrols( @$ L5 b! q; F- {+ o) n" }
GUI with Axes and Menu' w: _3 r2 L+ _, ~. L
Modal Question Dialog
1 |# X3 {7 }% \) M/ [
9 m- W9 ^% s! O2 x! W3 P- @7 ?(3)图形用户界面设计窗口
% j2 \% @' m" ~2 u7 P, V0 X1 z: Q图形用户界面设计窗口由菜单栏、 工具栏、组件选项板、界面设计区、状 态栏等部分组成。
- A5 C# U3 r2 l8 H& {% H2 s7 o- n- H" w2 a% p/ Q
(4)图形用户界面设计工具+ }" T( W8 O3 x& ?+ M/ p! P& g* l8 I
对齐对象工具
$ O8 K' v4 j% F6 J( U# v/ @菜单编辑器3 c5 ^) O% K" T; X% W/ \
Tab键顺序编辑器
* S3 G2 g7 ?, l( ]1 |* ?工具栏编辑器
% _5 W  e  A% c) p- W) X' ^& n代码编辑器
* x5 P4 ?% v4 F" h' S9 x) `9 Q! C4 \对象属性检查器5 k7 L- z' U& {" m; ~- W
对象浏览器9 h7 s* W$ U) ~: T1 d! j0 q
. N& @- _2 M# O
对象属性检查器是用于检查/修改对象属性的工具。( }9 _9 N1 q/ f/ j0 Z9 d* F+ `4 `+ m

$ m! Z7 {" w9 G& b1 N1 q: @菜单编辑器: X# ?) t7 s5 W) j: ^8 [
菜单编辑器构成
( l/ \9 N' s# d5 Q' H0 q工具栏6 v1 s% V- j; ~1 y) v
菜单列表
1 ^6 B* F; f& L  c菜单属性面板
$ T4 ?' y6 W2 i8 g8 s图形窗口的MenuBar属性
/ E8 t  M& w6 w) h8 Tfigure
+ x+ V# Y5 R6 j8 b& p$ I2 @4 znone8 p4 u; I# w% d0 Z' ?( h
菜单编辑器 添加自定义菜单% K/ X. ]' e% ?$ e1 t
新建菜单 新建菜单项 设置菜单项属性
7 [/ g0 Z5 N7 y: M6 |0 d1 H% L! \+ C% W' R% J' m% Z
对象浏览器
1 Z/ s' ~) j! n6 D, s' }6 l) N' L对象浏览器用于查看图形对象和展示界面的组织架构
& H% G  V7 {# z  j4 l, r
1 H- L1 S8 B  r! @+ t回调属性与回调函数
5 k9 `. T4 }  F! N" s(1)回调属性
0 G9 g. r7 F( m$ t- m, WCallback属性:按钮类控件和菜单项的单击事件的默认回调属性。9 F: K* `5 b% B1 w1 T
CreateFcn属性:定义创建图形对象的响应。: v) X& v% k9 o( z
DeleteFcn属性:定义取消图形对象的响应。
2 |& l* _; E; h7 j" e/ zButtonDowNFCn属性:定义单击鼠标键按下的响应。+ y1 Q/ A5 A( g- q/ q4 O- N- t  K
KeyPressFcn属性:定义键盘键按下的响应。( r3 n3 a1 O" u& o. r6 D( j) W5 C
SelectionChangeFcn属性:定义改变选项的响应. |* R; x: @% h0 `7 R& }) V- i

/ a4 K4 d; x$ n/ A(2)回调函数框架
& ^# A2 ?$ T1 c2 N/ N  Ifunction 对象标识_Callback(hObject, eventdata, handles)
! K7 T! s4 y* `! x" K: E5 W0 Q其中,hObject为发生事件的源控件,eventdata为事件数据,handles保
7 S; W% f, I# _' }: L存图形界面中所有对象的句柄。
" w, H- i1 T5 Q" n
, I2 F6 g: N# h2 M- @
  • %“绘图”按钮的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 d& Z6 w+ K* D% H" v& Q
6 [% B" w, M) S5 [

0 {6 l- I- F$ J! B# P. W# [
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-4 18:49 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表