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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

2 Y: C$ {- _6 j% w2 x3 z. `% r& }图形用户界面(Graphical User InteRFace,GUI):
+ S1 l9 ?/ S- [- H用户与计算机进行信息交流的窗口。
# b. P9 D5 w& k# g* T2 t# H
$ U  d3 t$ Z! h( O! h) s" A设计图形用户界面的方法  z, m: z7 D/ T! ?- X
调用建立用户界面控件的函数7 ^$ W# u" J. v+ U: G0 W
使用MATLAB提供的GUIDE工具进行可视化设计
% {4 k3 I' i& _' h0 O* Y: m# X; C: E1 N
控件对象及其操作
3 b6 P9 K  F' V7 H* L+ _$ X; @(1)常用控件
' O6 H: h; f4 ~输入和输出类控件:编辑框、静态文本、列表框、滑动条等。
1 Y  H/ N, r1 y% k, ?& j. G- f. Z实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等
, S. W# a( S7 m  ^(2)建立控件对象
  g3 }6 b' s7 A! X! i6 U, H函数uicontrol用于建立控件对象,其调用格式为:
3 ~3 L" ^( g) ^3 D1 C" b+ Q3 @$ t8 V4 J; k5 j' ?; E) U
句柄变量=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…)
! l' d# m% ~0 Q2 j& G# ~9 M2 e
5 S) I% ]# `% }3 L* A) ^' ^其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认
9 y# n! s* _; k$ y在当前图形窗口建立控件对象。
* V% p' F! s" n6 _, ]
% W( V' i, N9 T2 l(3) 控件对象的基本控制属性* J# V' [& J& J) c
Style属性:定义控件对象的类型,例如‘pushbutton’表示按钮对 象,'edit’表示编辑框,等等。
. J: `4 |5 [& mString属性:定义控件对象的说明文字。  K& a7 j3 L: M0 Y
Tag属性:标识控件对象。3 O* m) W8 G) {  o/ \; t
Enable属性:控制控件对象是否可用。
/ Q3 E. |) x3 L4 a) y3 NPosition属性:定义控件对象的位置,其取值形式为[x,y,w,h]。, ]& u4 O% E0 L- S; f
Callback属性:其属性值是描述命令的字符串或函数句柄,当选中控 件时,系统将自动执行字符串描述的命令或调用句柄所代表的函数, 实施相关操作。- }) S! h( @5 o6 P9 L0 _' a0 U
(4)回调函数; S8 A1 d8 V6 R% h( c" h* U
回调函数定义对象怎样处理信息并响应某事件。
1 ?  ^+ Q) p; G- k5 Z回调函数的定义格式:3 S, U2 e4 Q$ ]
function 函数名(source, eventdata) …… end
  R1 c0 [. g8 g! X其中,参数source是发生事件的源控件对象句柄,eventdata存储事件数据。
/ y. r2 H5 J' c$ `% D(5)例子1
& n, D+ z5 X# @例1 在图形窗口中建立三个按钮对象,当单击按钮时分别绘制正弦曲 线、显示或隐藏坐标轴的网格、清除坐标轴的图形。0 q7 M' q& e& P& `5 y! P
; N& J0 R' y7 K: D5 Z3 V1 J& G
  •   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# w- b( y5 {$ F/ j

5 k% Y' ^' j  T: |4 a' B( m' x/ h5 a  C' E
菜单对象
8 C2 X- S* }; v3 O- q. s(1)建立菜单对象
3 C( R1 X- x. S: a/ i- luimenu函数用于创建、设置、修改菜单。% I* y3 _  J1 t. z, [  {
建立一级菜单项的函数调用格式为:
6 ?# q" m1 \, B0 H( v, z5 n一级菜单项句柄=uimenu(图形窗口句柄,属性,属性值1,属性2,属性值2,…)
7 X7 W" e$ H2 P建立子菜单项的函数调用格式为:
9 T& y) E5 o# [8 V7 U子菜单项句柄=uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,…)
/ x0 c) s* \* a" k) S; p7 E# @8 ]: T% |# ^5 ?$ B2 L0 y+ D" |
(2)菜单属性6 I5 ]' R8 k: Y- F8 O$ ]* [
Label属性:定义菜单项的名字。
9 t3 W. V. J- x; _Accelerator属性:定义菜单项的快捷键。
1 m' T% z5 e( l: B& v1 c4 nChecked属性:指示菜单项是否已选中。8 R$ X& H1 J; m+ K7 X/ d
Enable属性:控制菜单项的可选择性。
; [( c* H4 L7 }0 M+ {+ xSeparator属性:在菜单项上方添加一条分隔线。
0 |4 Z/ B+ k/ _& h2 @! R( V2 r2 x* _, z1 L" W0 n# P) |) x
(3)例子2( r4 p8 r  m& h# m4 k4 W8 C3 P( n
在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜 单项“线型”,其下又有3个子菜单项,分别为“实线”、“虚线”、 “双划线”。4 z1 y5 [: T) a; M1 Y
0 [# i7 h* U7 Q! l0 }1 N% \" G
首先运行例1的程序生成图形界面,再 运行例2程序,在界面中添加“图形选 项”菜单项,这时“线型”菜单项不 可用,单击“绘图”按钮绘制正弦函 数曲线后“线型”菜单项变为可用, 这时可以改变线型,例如双划线.
- A7 f; H5 B3 m5 k% I2 ?7 a2 T. }2 e7 c) l2 f/ b
  • 新建一个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
    % w' F6 |; U8 r+ r, h$ t
8 [) w0 ^1 a$ L) J8 O, j/ Q+ Y7 P

. V4 }4 a& y5 X) H8 Z; e+ g本人觉得一些常用的函数
  G: D" s, D5 k& z
4 m# y& F: v4 }6 K: z6 Y# Qgcf返回当前Figure对象的句柄值
6 M6 e4 L9 I, w4 h8 @6 F2 d
2 v  U. R. j" Y4 ]h = findobj(‘PropertyName’,PropertyValue,…)* J5 ]) \' `: r$ D/ B9 D
返回所有属性名为‘PropertyName’,属性值为’PropertyValue’的图形对象的句柄。可以指定多个属性/值对
: l  ?# `4 C" ~
2 J% \# F$ ~5 p7 @/ K0 Y在当前坐标下查找所有直线对象:
0 ^& u2 L3 E+ e& a- O( ?h = findobj(gca,‘Type’,‘line’)  %gca为当前坐标的句柄
1 a8 v% x+ n* T3 }) t& L
) O6 ~" _/ L& y- u- rmatlab自带用户界面设计工具GUIDE8 b. W4 b% g1 l% J
GUIDE:Graphical User Interface Development Environment
% B* Q3 f9 M- r
+ }) N1 y3 N# }9 Q, a图形界面设计窗口
+ e# n. o' V) D) s) H7 v
# d+ F! j  V- _! j(1)打开GUIDE  {9 b& n* S/ r, I" z% e$ `; L
在MATLAB命令行窗口输入guide命令。' s% f* f; ?* Q/ N6 \) s* a( D
在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按
1 A- h6 P9 Y. }! }. H钮,再选择“应用程序”下的GUIDE命令* z; `9 S" {+ K. _1 s
; a2 a8 J1 m8 d& X2 s0 y7 A
(2)图形用户界面设计模板
7 y  h* L3 b, o) X- I* v- A2 |Blank GUI (Default)9 r1 Y$ P. j. R
GUI with Uicontrols
, F- Y7 W+ ~4 q6 RGUI with Axes and Menu& E: _. R$ @$ u
Modal Question Dialog2 _/ I6 I& A+ H( L1 p/ \/ x

3 T1 J; n, p" {, t2 Y1 K) Q' w(3)图形用户界面设计窗口) V, a9 h) X0 `1 e, _
图形用户界面设计窗口由菜单栏、 工具栏、组件选项板、界面设计区、状 态栏等部分组成。: t' _, r# M6 j2 D) w7 J- m& h6 k
' P' {2 A$ q# N' K, }- B6 L
(4)图形用户界面设计工具+ Z' W; T) ~; A& D
对齐对象工具
* a- ?/ ^2 X8 C7 R# L菜单编辑器
& N: C8 [9 S, bTab键顺序编辑器
0 ?9 t. B8 Z/ P0 K& `. C9 j工具栏编辑器
) E- G4 @8 e) V: o代码编辑器
/ m$ e9 V7 B* q: S* h对象属性检查器
" \# t8 _- w0 V0 C对象浏览器
( ?/ p( u9 v2 ?
* Z- i( A  L: A2 G& M* n2 P对象属性检查器是用于检查/修改对象属性的工具。1 r$ M) E3 Y+ U  N6 \- g1 T
1 H3 M/ U* f0 _8 }8 j) D) v
菜单编辑器* L; A! s8 j' o. a0 h3 ^* y" A, \
菜单编辑器构成
1 d$ M  o; \% o; P  y, I8 Y工具栏
  g2 A0 _! d% x, t* b菜单列表0 P# I) J# g, ^4 ?
菜单属性面板' s7 e! ^0 _2 g1 J  l$ ~, }
图形窗口的MenuBar属性
+ q7 e( A9 e) [3 Bfigure6 G, d6 h! `3 c" N* g$ t' |8 D: d
none
( X% V/ z6 Y/ j* L菜单编辑器 添加自定义菜单) [6 Z3 B6 R0 M0 D" X8 }
新建菜单 新建菜单项 设置菜单项属性
  k. |5 N- v4 {7 C  M
$ n" k0 c/ ~' y# K  l/ x9 L" M2 t对象浏览器
5 ~4 X1 Z7 H$ o5 ~3 c对象浏览器用于查看图形对象和展示界面的组织架构
9 Y. S& B1 ~- \9 A) ?0 f$ [" E$ M0 w, }6 v1 a
回调属性与回调函数  q+ r$ u" k9 j7 R3 j0 B! _
(1)回调属性. c( Y9 y4 z( r# t
Callback属性:按钮类控件和菜单项的单击事件的默认回调属性。
* y4 d$ [0 j* v8 W, iCreateFcn属性:定义创建图形对象的响应。
5 f3 a" |+ |; c/ ]0 j$ e: l1 b; ZDeleteFcn属性:定义取消图形对象的响应。; V/ S2 U' b* Z
ButtonDowNFCn属性:定义单击鼠标键按下的响应。
; ~7 m; a, Q0 n& i# M6 m( TKeyPressFcn属性:定义键盘键按下的响应。
. a) {' e5 d( p2 g( Z/ ^- H! iSelectionChangeFcn属性:定义改变选项的响应
3 W/ D6 m! }5 j/ J" Z7 w1 ^$ B: ]4 @5 v! X
(2)回调函数框架
5 P$ P) ~' P0 X% O  wfunction 对象标识_Callback(hObject, eventdata, handles)/ z) R" a  Y$ C% i% D
其中,hObject为发生事件的源控件,eventdata为事件数据,handles保0 v* e( `, y- _2 A
存图形界面中所有对象的句柄。
5 F, ~) g. F0 o7 G4 A/ A" x1 n. Z: ?. H7 W% l
  • %“绘图”按钮的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';
    ) [# ], V7 c3 W; L  b- l2 R* X' G

" @5 g4 q( \9 C" X9 \
" b8 C  [9 H. E
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 12:58 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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