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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

4 E9 Z. @2 q0 L' G图形用户界面(Graphical User InteRFace,GUI):' i4 G8 ]1 V8 T! d
用户与计算机进行信息交流的窗口。
4 J2 U: t0 f: b! I% C7 r! T( h, \" y0 {2 j* p7 U# p2 K
设计图形用户界面的方法: }( K" a0 [1 [' C" Z
调用建立用户界面控件的函数
' K' k1 S7 A' n7 G' c+ ]% {使用MATLAB提供的GUIDE工具进行可视化设计
$ }( m/ N( ]- G. h" t/ w, v$ ~* q4 D; \' q/ c' C  C* `
控件对象及其操作  ~% Q: \* f, \; G9 g5 B
(1)常用控件
$ r2 E' f! t% C- {5 x输入和输出类控件:编辑框、静态文本、列表框、滑动条等。) ^0 r) ]; k% K8 f" d, ]8 z
实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等  G8 o9 K& S% Q+ p6 {2 }& }* X( w
(2)建立控件对象" }/ |. x4 S7 `; h
函数uicontrol用于建立控件对象,其调用格式为:
) u* `) Q; r" X$ ~0 `) X0 B: p/ T5 |! q: @8 Q) T. x
句柄变量=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…)! Q- u" q2 K! P* m

2 i% N: A  S0 B: ^9 q其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认# B, m0 X- ~0 C* y: [# {
在当前图形窗口建立控件对象。- o0 L* U- D7 W; c, n
  X! t( I; D* `( {- x9 G( p
(3) 控件对象的基本控制属性
  E( l# q, p  W. PStyle属性:定义控件对象的类型,例如‘pushbutton’表示按钮对 象,'edit’表示编辑框,等等。
: I) b/ u1 s5 X" D/ O2 C2 `# aString属性:定义控件对象的说明文字。
- X; e6 D+ k6 ZTag属性:标识控件对象。
5 y, F5 ~# }' y! G/ p  u3 ?Enable属性:控制控件对象是否可用。" y7 V4 _. u% l% g
Position属性:定义控件对象的位置,其取值形式为[x,y,w,h]。
$ C1 g4 c& x6 u2 l# {# {9 SCallback属性:其属性值是描述命令的字符串或函数句柄,当选中控 件时,系统将自动执行字符串描述的命令或调用句柄所代表的函数, 实施相关操作。; |& m, W% z/ G7 ?4 k+ ^
(4)回调函数
1 I- t9 j: e$ w% U- V' ~5 F: F回调函数定义对象怎样处理信息并响应某事件。; \6 o- Z3 f# X& [
回调函数的定义格式:
" E* ]. E7 G2 J$ [function 函数名(source, eventdata) …… end
" h$ Q) E$ q  d. \- l% u% u其中,参数source是发生事件的源控件对象句柄,eventdata存储事件数据。' m  d+ t8 H. H' X" J
(5)例子1, b$ f2 N6 Y4 i( X- V: i& o3 }% q
例1 在图形窗口中建立三个按钮对象,当单击按钮时分别绘制正弦曲 线、显示或隐藏坐标轴的网格、清除坐标轴的图形。
3 A- e& a. ~  J" S: v
* E7 k, E2 p8 g2 ?0 _
  •   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
    ! o( D6 R/ c9 o$ ]

8 f: I, c6 Z$ R1 x9 g# J" m& T% W) Z0 C
菜单对象: j. r% Y! g5 c, ^" `* \  S
(1)建立菜单对象0 {  Y# B- @7 O* `* z. m
uimenu函数用于创建、设置、修改菜单。! r2 o! l5 o+ D4 ~8 V% A8 Y7 }) |& U
建立一级菜单项的函数调用格式为:: w- M8 _, g- i9 S; B
一级菜单项句柄=uimenu(图形窗口句柄,属性,属性值1,属性2,属性值2,…)
' ]7 Z  ?4 N2 ^4 R  s建立子菜单项的函数调用格式为:, x- [% L* f; h4 s
子菜单项句柄=uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,…)
& K$ k1 T" i: a$ g3 z+ U( s$ T
7 J0 T0 o+ i9 i(2)菜单属性
: h& R" H) G: l/ m" a' {Label属性:定义菜单项的名字。: _7 q/ `  y$ M& L" a% r: m
Accelerator属性:定义菜单项的快捷键。
- Y# g- ?" X4 C# M' sChecked属性:指示菜单项是否已选中。
2 l  O( I! @( R0 x, S2 OEnable属性:控制菜单项的可选择性。
; M  v$ s3 Z7 z5 \+ h% y' [5 oSeparator属性:在菜单项上方添加一条分隔线。
: S6 k5 F, L0 \! Q+ Z  w1 O! E  F4 B& h9 ?
(3)例子2
7 y6 A# l8 Y: y% Y4 ^在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜 单项“线型”,其下又有3个子菜单项,分别为“实线”、“虚线”、 “双划线”。# O! k* A' R& t* w% o0 a! I
$ v9 b7 m/ {0 O) t2 H2 \0 l
首先运行例1的程序生成图形界面,再 运行例2程序,在界面中添加“图形选 项”菜单项,这时“线型”菜单项不 可用,单击“绘图”按钮绘制正弦函 数曲线后“线型”菜单项变为可用, 这时可以改变线型,例如双划线.
4 S# G' S- C% g& P+ i# q" W
$ {' m5 r1 N7 T% b5 [
  • 新建一个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/ r4 ?* u% X5 m% C  E

# M4 _' P$ p$ p! P9 `" h
, G7 O5 J: q9 F本人觉得一些常用的函数
/ w/ q6 I- L; g# @8 h/ t( t& S
' {- M) k- _% p& _gcf返回当前Figure对象的句柄值8 E) f! n9 F, V4 d6 q

- F  j& p) h8 B6 mh = findobj(‘PropertyName’,PropertyValue,…)
* l: M+ T% k- C" J# n# E返回所有属性名为‘PropertyName’,属性值为’PropertyValue’的图形对象的句柄。可以指定多个属性/值对  P; _- \4 k$ K

2 I" l0 ^  Z, B; ~4 i4 l; N: H8 e在当前坐标下查找所有直线对象:5 A9 d" _' B; i. s' l
h = findobj(gca,‘Type’,‘line’)  %gca为当前坐标的句柄# ^) [% U8 ?" r% E$ P, o) Q% G' {

% i. h8 C1 x, X4 F: r# d: g. ymatlab自带用户界面设计工具GUIDE* j) {9 K0 A- T! C
GUIDE:Graphical User Interface Development Environment
! k5 C# j' e* ?& a
: N2 g% \: D# e5 d- k图形界面设计窗口+ R; ~9 t1 [) v- M9 T7 q. `
9 X: k: ?* m1 i7 l: k! ~
(1)打开GUIDE  }& n3 |1 q8 x7 k* y' b! l% x
在MATLAB命令行窗口输入guide命令。2 O# r) ]$ |! P% v4 C+ h0 g  e, {3 q
在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按
7 o- `. F# s; ^1 G3 I钮,再选择“应用程序”下的GUIDE命令% N( d: F) V8 G

3 n6 V( G1 F: E$ Z/ ](2)图形用户界面设计模板9 t- E2 l) g, ]' d
Blank GUI (Default)
* b. d. I5 W% i' F. w0 FGUI with Uicontrols" u+ e6 O1 z& ]; h7 G
GUI with Axes and Menu
8 |  X' K4 a' u5 }" |' \Modal Question Dialog
( b8 |; Y/ ?* z# l3 ^/ @5 ?6 ]& x9 A. r
(3)图形用户界面设计窗口( t1 G) T% h8 n7 h
图形用户界面设计窗口由菜单栏、 工具栏、组件选项板、界面设计区、状 态栏等部分组成。
& K1 v7 `+ L' Q6 q) x, ^
& z7 P" A2 S, C0 A+ s(4)图形用户界面设计工具
- H0 y  c8 z5 N* `对齐对象工具' R" |" h6 H! Y0 p/ Q% V9 m# N
菜单编辑器
5 y0 d/ Y; \# Q4 g+ U' STab键顺序编辑器
. _, T" B& L1 Z, {5 Z4 S工具栏编辑器/ n1 I$ z4 m5 B2 M' N: }
代码编辑器: t/ L, y4 U. @, J  X5 x# [
对象属性检查器& l, ^8 S) f7 Q4 q1 r& L+ i
对象浏览器
" [& D) U2 |& H
/ ^/ d/ \. {8 Z- n! {对象属性检查器是用于检查/修改对象属性的工具。4 h# P7 K, q' O- }! y

' d9 Q! L: p5 h菜单编辑器  Z! L! Y" F5 T# K
菜单编辑器构成) t3 b) q0 y" P' B: \0 ]6 n
工具栏! k6 w+ @! p( P1 w, X+ O
菜单列表2 E" @- H2 d" N5 s: h6 l* p; R2 d
菜单属性面板4 l. @, s: Q( ^& r5 N  K
图形窗口的MenuBar属性
( ?* y2 h- j' |9 u, s2 pfigure
# R0 V% m) z9 L& u$ \none4 F0 y2 s* z  u5 e% }3 d; M1 z
菜单编辑器 添加自定义菜单
/ Q0 s% U. N; Z" i3 [. K, Y新建菜单 新建菜单项 设置菜单项属性
% x8 F" r  i; [- X2 U1 U( W
7 N! l/ S" D! j$ j4 ]) p5 m8 |5 l对象浏览器1 b! x3 S! q. _; g, _0 u
对象浏览器用于查看图形对象和展示界面的组织架构
6 E+ n* r6 P% a% o& _
) g8 d/ K; e9 c% r2 F回调属性与回调函数( z! i2 ~- j, o' v* U7 v
(1)回调属性
. M& {  l7 h7 A& V/ n$ b5 v) zCallback属性:按钮类控件和菜单项的单击事件的默认回调属性。$ F, z* y0 S9 `$ L* u
CreateFcn属性:定义创建图形对象的响应。# |7 p9 m- {$ M" |
DeleteFcn属性:定义取消图形对象的响应。
# v' i6 O0 l& V  a7 {- L' B" GButtonDowNFCn属性:定义单击鼠标键按下的响应。
& i* p' I0 W$ ^! O; cKeyPressFcn属性:定义键盘键按下的响应。5 w' ~/ U6 W2 d, p. f2 D
SelectionChangeFcn属性:定义改变选项的响应0 m" h" u5 v( O' k: h5 r: K0 d" ]
' n; i  l9 l8 w
(2)回调函数框架
; z! M. v& q+ q% W1 |function 对象标识_Callback(hObject, eventdata, handles)
/ e' B% A7 l& x9 ^! f% o其中,hObject为发生事件的源控件,eventdata为事件数据,handles保
' _' C' m+ p- B* @存图形界面中所有对象的句柄。" M9 Y# ~- n9 r! B

2 K" k( P  Z6 H4 v' E: j
  • %“绘图”按钮的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';& w: k* J9 t5 m5 T

. P, B' {5 Y7 u) |; p8 U
- l6 y$ e! E$ q$ V
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 00:29 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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