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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

+ d5 X1 R/ K. r2 ]$ F8 s: n" {图形用户界面(Graphical User InteRFace,GUI):. ?0 Q( \/ w! g7 E/ Y
用户与计算机进行信息交流的窗口。
. T0 \+ K. N0 A0 Q
: H4 {& l% s+ ^* l5 I% n% z设计图形用户界面的方法
: F7 g8 a% K, k" l& V. F调用建立用户界面控件的函数
" v$ C+ {1 D2 w# ^$ E使用MATLAB提供的GUIDE工具进行可视化设计: ~6 E5 }( E& a! @3 t5 g4 p

! J: d& U% p7 P  b* V控件对象及其操作, d9 l8 e; h& [- Z* ?
(1)常用控件  K7 \; |' E' u1 W4 H9 @; @
输入和输出类控件:编辑框、静态文本、列表框、滑动条等。
6 u( i9 U& L) l0 f, d9 F! F实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等9 m' j/ m7 Y, O, k" G1 o
(2)建立控件对象7 j% e3 d9 @$ u
函数uicontrol用于建立控件对象,其调用格式为:
9 J7 f5 j/ Z2 K0 P+ k$ q/ l0 T! E! `0 J6 @, ?# @
句柄变量=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…)
: ~2 \% E; A, o/ e3 V) T: n$ x) J
* |$ x6 l$ ~  ^6 ?& S# @9 N# Z& W" M其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认
' B: ~6 y: w, l. E& ~8 r' H在当前图形窗口建立控件对象。
: \$ l( @7 A8 @+ b- p6 ]
. j) X0 c6 W7 }7 G(3) 控件对象的基本控制属性, a  P- J, R# y+ S5 R% |" v
Style属性:定义控件对象的类型,例如‘pushbutton’表示按钮对 象,'edit’表示编辑框,等等。
& g, [% b( f* d" FString属性:定义控件对象的说明文字。* q2 ~4 ?  w, k6 b8 B1 b/ K+ b
Tag属性:标识控件对象。
5 R, ~9 }( r4 s; b# p! l( JEnable属性:控制控件对象是否可用。8 G, Y% H5 H7 v& o& }
Position属性:定义控件对象的位置,其取值形式为[x,y,w,h]。" A% i. K, Y; a. E7 O
Callback属性:其属性值是描述命令的字符串或函数句柄,当选中控 件时,系统将自动执行字符串描述的命令或调用句柄所代表的函数, 实施相关操作。( {: u+ I0 V. j4 P
(4)回调函数) S8 z" I. ?% s; p7 k4 F( V$ [
回调函数定义对象怎样处理信息并响应某事件。
& c0 d1 o) @# ]. ^5 ^4 U7 I  ^回调函数的定义格式:$ s0 [) `/ P2 ^8 w: [/ d1 E
function 函数名(source, eventdata) …… end& s" _  i: J1 \
其中,参数source是发生事件的源控件对象句柄,eventdata存储事件数据。
$ r* n/ n5 |4 Z* G4 x% Y, X(5)例子1
$ y& g; e- m1 @# Q* y例1 在图形窗口中建立三个按钮对象,当单击按钮时分别绘制正弦曲 线、显示或隐藏坐标轴的网格、清除坐标轴的图形。! F9 R7 R( V$ q8 f2 }( G

% v0 ~5 L  M+ R. T+ F/ t
  •   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' d  ^( P2 @& g& Z  l6 N7 H
: U: v$ F; H$ H" B( o
2 i( k* i! ]3 ]
菜单对象
: p" G2 ?; e- p; m(1)建立菜单对象" k: n  H0 g" j; z' n+ V
uimenu函数用于创建、设置、修改菜单。6 S' k* ]! x! T
建立一级菜单项的函数调用格式为:
8 S# j0 Y7 t0 E6 v0 i一级菜单项句柄=uimenu(图形窗口句柄,属性,属性值1,属性2,属性值2,…)
4 y5 |1 r& s- d. B建立子菜单项的函数调用格式为:, V8 D) A5 ?: K; ^( j! H( Q
子菜单项句柄=uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,…): b2 l  e; t5 i# \3 J- [* w3 z3 n
& q) f/ \. _2 q0 N
(2)菜单属性! p& \) n' F- M
Label属性:定义菜单项的名字。
3 U( l( h/ H; Y' j2 vAccelerator属性:定义菜单项的快捷键。
: x: R  w2 j/ rChecked属性:指示菜单项是否已选中。
6 L8 P0 D& n4 ]( E' lEnable属性:控制菜单项的可选择性。
( O; C3 u' f( T" u' k% \0 pSeparator属性:在菜单项上方添加一条分隔线。2 j/ }7 E. ^: ]  r

8 E2 f6 L; ?, L+ O(3)例子2
) _7 X- x6 V: b' c* d8 W9 f$ X在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜 单项“线型”,其下又有3个子菜单项,分别为“实线”、“虚线”、 “双划线”。
, p5 b. b8 J) l/ ?/ D4 e) g& x( B, ^! f' E2 H" m+ y
首先运行例1的程序生成图形界面,再 运行例2程序,在界面中添加“图形选 项”菜单项,这时“线型”菜单项不 可用,单击“绘图”按钮绘制正弦函 数曲线后“线型”菜单项变为可用, 这时可以改变线型,例如双划线.! F) P) [3 f* z* k

) Y  O  H& N2 G4 m5 M) x
  • 新建一个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* {* J; m- {" d& v; K
9 P/ W$ q$ _4 M  X7 l5 ]/ ?
; Y4 l/ {( `) k: e* |
本人觉得一些常用的函数
: c1 {$ F8 S: T' D7 W
6 V, o" @' [- e0 {5 h9 vgcf返回当前Figure对象的句柄值
# g% W- Z6 n) c$ U5 {+ d3 L# w; X2 @  ?" \  W7 O
h = findobj(‘PropertyName’,PropertyValue,…)0 n. _' n  ~; A$ ]$ u+ ^% K
返回所有属性名为‘PropertyName’,属性值为’PropertyValue’的图形对象的句柄。可以指定多个属性/值对
( _2 X6 {8 y2 T& x0 |8 {; L3 v& B! B$ Z& L$ l, W" z
在当前坐标下查找所有直线对象:5 g1 D+ i  Q# {* {: |! G$ w+ J
h = findobj(gca,‘Type’,‘line’)  %gca为当前坐标的句柄8 l3 H3 x0 s5 t) m7 |2 f

! L1 o! a$ a" `. u) |) K* v% qmatlab自带用户界面设计工具GUIDE
5 U2 G) R! ?  Y3 y  kGUIDE:Graphical User Interface Development Environment! ~' @# |6 V9 h, x
- s5 r9 p  R) R1 D
图形界面设计窗口- y, b: u2 p0 m6 `$ g9 F4 {
5 j4 m8 o+ i! x; i7 U+ ^3 h
(1)打开GUIDE7 x( m1 E/ T5 G- u! v
在MATLAB命令行窗口输入guide命令。
2 R1 I0 `- J1 h  L7 S0 x$ n在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按" m. d7 ?5 O" T! J, o
钮,再选择“应用程序”下的GUIDE命令
- S+ I0 M& v# n1 ]" J, X+ a8 B$ C5 ?' E
(2)图形用户界面设计模板* t% o, q- h4 B$ q: s. G
Blank GUI (Default)
+ ?2 T4 m/ I& _, KGUI with Uicontrols
+ v  X1 f5 @' a7 QGUI with Axes and Menu
) x+ Y! ~5 t5 E0 yModal Question Dialog
" k7 Q$ w2 u5 p
$ p8 A& z4 n$ A+ L" Q* V* p(3)图形用户界面设计窗口8 i2 S0 h* g' @( f* c; [: [$ ^7 h
图形用户界面设计窗口由菜单栏、 工具栏、组件选项板、界面设计区、状 态栏等部分组成。& z0 j" O' S) z
$ H2 G9 r4 ^) @( A7 ]3 U
(4)图形用户界面设计工具
2 J- Q5 ^, Z4 G1 {% }对齐对象工具  P. P, B2 A7 i' ]
菜单编辑器
6 f  d% q" C2 @! I, U+ H+ `Tab键顺序编辑器
4 h+ A. O/ M( U7 y/ H' X工具栏编辑器
  h, I; W* W3 L6 H  X% o; g代码编辑器+ w6 h% Y, z! _8 q/ {
对象属性检查器
0 q" g" i  |7 l5 ?5 F' Q6 v8 |对象浏览器1 r9 n( ^4 i$ o  w9 K3 `

/ W4 |3 r8 I$ P0 x7 }( L对象属性检查器是用于检查/修改对象属性的工具。! _1 `" Z; F- g. ~+ z$ i
* s( b/ [- c# p/ _- `
菜单编辑器  @; R2 i9 V, |  E% v
菜单编辑器构成& b" w1 v: _& c% {3 v. m7 _
工具栏
+ L9 r4 [4 o* N6 j% s% t菜单列表
5 [6 `* [2 n5 F" H# f菜单属性面板
' d8 F  F) `6 ?4 V5 e/ q& N图形窗口的MenuBar属性9 e1 o: {$ _; m0 z+ d% j3 V3 [
figure
' R4 l0 |) d+ H7 E' ]! Nnone+ a0 B! _' _# O
菜单编辑器 添加自定义菜单
" L& k; l3 ]# w# c) ?新建菜单 新建菜单项 设置菜单项属性( I6 o- H  A7 K5 M
; ^9 z( T$ g3 l
对象浏览器
. e. [8 B6 I" F% P对象浏览器用于查看图形对象和展示界面的组织架构$ u: X# C1 w9 y* J' C" `9 }
# G, @* a6 B# C. W/ j
回调属性与回调函数4 ?7 O1 J; [) F1 {# C. K9 d3 f3 e+ D
(1)回调属性% v$ H' a/ i! S  E& |7 A* T. ?
Callback属性:按钮类控件和菜单项的单击事件的默认回调属性。
' m0 p0 G; O& g7 o; P2 bCreateFcn属性:定义创建图形对象的响应。8 c, Q4 D. }7 e  f
DeleteFcn属性:定义取消图形对象的响应。
2 J" Z& B" F9 L* w3 N3 LButtonDowNFCn属性:定义单击鼠标键按下的响应。# x  @- D( }) B4 q% B
KeyPressFcn属性:定义键盘键按下的响应。
5 I  C9 e. ], a/ o" X  lSelectionChangeFcn属性:定义改变选项的响应0 X/ }, y2 B2 ?/ n& `0 \
9 {1 e; R5 j2 }) C/ @3 w- N) U
(2)回调函数框架4 ]3 V2 D* [0 Q6 @
function 对象标识_Callback(hObject, eventdata, handles)4 U4 L3 u7 V8 f! {$ Z
其中,hObject为发生事件的源控件,eventdata为事件数据,handles保7 V$ a" y8 r" a5 @2 Z+ F
存图形界面中所有对象的句柄。4 O& a' a$ o) K

* \% j7 S( B, H/ p" ~( y6 w2 G
  • %“绘图”按钮的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';
    ( h8 J4 {; I* a: W% V: s5 G: I' N
; `) [" V. N9 G+ ?7 T# F
% y" k/ {& v) ]! d; |" w2 M" J$ Q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 03:58 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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