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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

1 e4 x) c% }7 h$ u  f- U图形用户界面(Graphical User InteRFace,GUI):, \7 _! Z, C* r
用户与计算机进行信息交流的窗口。% p  L' s! ?7 o9 i9 @4 b3 k0 s6 c, }

. x% s& S" N+ O* h3 z, Y4 `/ T7 ~设计图形用户界面的方法9 M' N7 t" x' ?6 L
调用建立用户界面控件的函数. |/ \2 o4 ^4 G2 @
使用MATLAB提供的GUIDE工具进行可视化设计
; I( |4 K' Q7 l) M8 L% K$ L# ]) I% h) p! }9 p) ~
控件对象及其操作/ q/ c- V- V. L5 C! U% T% m
(1)常用控件
* n( r, r( T, O1 c: B; ?& F输入和输出类控件:编辑框、静态文本、列表框、滑动条等。
; H; W( Y8 t9 J9 {* B实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等7 F0 Q7 J9 H% e- C- O5 U
(2)建立控件对象8 r# e" R5 t6 _
函数uicontrol用于建立控件对象,其调用格式为:; K8 f- Y+ S% B+ f, E5 R5 W
: y  o# x. P* @" z8 R3 x
句柄变量=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…). j8 V+ g" W( ^

; c5 e/ @0 z, R0 r; I$ B. G0 }其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认
4 ?& D) ?( z" @2 Z, m$ b6 y* }在当前图形窗口建立控件对象。
" v4 ~7 C' G! q6 U$ m3 g- S2 @( r6 N/ e# K" t/ ~9 f) G3 N
(3) 控件对象的基本控制属性* I/ K( P: j, x5 a) e
Style属性:定义控件对象的类型,例如‘pushbutton’表示按钮对 象,'edit’表示编辑框,等等。
$ I, {& K$ z8 ]! u5 V$ bString属性:定义控件对象的说明文字。: ~& X( n1 k/ n. x2 {1 a, a/ P$ z. ^7 q
Tag属性:标识控件对象。
* H  T# l0 G' P1 TEnable属性:控制控件对象是否可用。
# s: S9 L! D# Z$ v; qPosition属性:定义控件对象的位置,其取值形式为[x,y,w,h]。
* W" i3 w. y( h+ {# lCallback属性:其属性值是描述命令的字符串或函数句柄,当选中控 件时,系统将自动执行字符串描述的命令或调用句柄所代表的函数, 实施相关操作。
2 ^4 H/ w; G) j# B" U7 P(4)回调函数8 j$ Y9 l0 R. x. `; ?- C
回调函数定义对象怎样处理信息并响应某事件。, Z3 k# A& y$ S9 ]; j
回调函数的定义格式:
: D6 C. {( D9 X* j" A' {2 pfunction 函数名(source, eventdata) …… end  `) V7 s3 p! O3 n0 o. Q  i# y
其中,参数source是发生事件的源控件对象句柄,eventdata存储事件数据。
; D$ F# F3 M+ {3 O1 S% Q% [. q(5)例子1- _; ]) c9 Y& N2 w6 ^
例1 在图形窗口中建立三个按钮对象,当单击按钮时分别绘制正弦曲 线、显示或隐藏坐标轴的网格、清除坐标轴的图形。% v) r& F6 r4 d# j" J
) S2 Z) y4 R4 B; d0 s9 D* v" C
  •   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
    & P- r) L$ @+ T7 q; Z
7 ?; t% e" b2 v' C7 K6 D

  Z3 _* m* E, P8 |+ U+ v菜单对象
) ?5 W# F1 W& A5 z* h; ?) j(1)建立菜单对象; O6 k7 [2 ?; c
uimenu函数用于创建、设置、修改菜单。
: |9 V- ?6 s6 \9 J2 ^. f, C1 n建立一级菜单项的函数调用格式为:
: u8 O8 G8 G: s2 m1 s- J一级菜单项句柄=uimenu(图形窗口句柄,属性,属性值1,属性2,属性值2,…)
3 D4 y4 `$ T, ]9 S- M建立子菜单项的函数调用格式为:% Z) G1 k8 [8 f1 g
子菜单项句柄=uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,…)$ s& [6 i; |4 x( y

7 T; d: s' S3 N7 h! t(2)菜单属性
- G: e  U8 z  ]' w+ h  K) {* MLabel属性:定义菜单项的名字。
; s* [& R3 ~6 ^- TAccelerator属性:定义菜单项的快捷键。, n8 b4 P2 x9 B6 B8 L& e6 {9 v
Checked属性:指示菜单项是否已选中。
+ y2 i+ @; {% s2 Q* EEnable属性:控制菜单项的可选择性。+ V: O# |& C$ b
Separator属性:在菜单项上方添加一条分隔线。
) N4 Y; ?: ]9 _7 e/ @9 v* N0 T) `# V  l8 d( z- @: V, F
(3)例子2
( n' ^7 [: X* o在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜 单项“线型”,其下又有3个子菜单项,分别为“实线”、“虚线”、 “双划线”。
0 i) I! h" I3 Y, G. R! I& ]0 F+ r4 u+ m8 m% Q. e1 M3 c; P
首先运行例1的程序生成图形界面,再 运行例2程序,在界面中添加“图形选 项”菜单项,这时“线型”菜单项不 可用,单击“绘图”按钮绘制正弦函 数曲线后“线型”菜单项变为可用, 这时可以改变线型,例如双划线.
! ]* S. x7 S4 _7 s$ J3 v' r7 r
) m3 v: n; x  G7 J) H, H
  • 新建一个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) f. ^# g) h+ T# i
! }+ j% A6 p3 i- D  Y

- Y  w  S4 F4 p3 g: b1 X本人觉得一些常用的函数
7 d* G6 q0 k! l: l1 L" |; g' i: G/ y% b* p2 S, [5 y; v3 N2 P# Z
gcf返回当前Figure对象的句柄值( Y4 C! y# m  X. H% U8 D
3 g1 x) U: O' G3 G  t
h = findobj(‘PropertyName’,PropertyValue,…)! w5 [# |3 n$ F
返回所有属性名为‘PropertyName’,属性值为’PropertyValue’的图形对象的句柄。可以指定多个属性/值对2 \, N* Y  V! [# {* j- n1 A

! T( j$ B8 R3 j& b在当前坐标下查找所有直线对象:' a6 c$ [: G3 Q* x9 W
h = findobj(gca,‘Type’,‘line’)  %gca为当前坐标的句柄2 C$ X, O5 A! Y, Z  K5 X
' I, H: E" X# v1 X6 Q& E0 F1 j& k
matlab自带用户界面设计工具GUIDE* w# e4 v9 D( Q2 F
GUIDE:Graphical User Interface Development Environment6 V& c0 t7 m, a& O8 e$ z/ V( O$ g

, r( K0 U2 x, K! e9 @2 ?0 q图形界面设计窗口
, X% U- l  \; Y2 k; p: l% C& s9 t( ?* m9 r  d* J
(1)打开GUIDE3 q! T: k( r- q7 }6 q
在MATLAB命令行窗口输入guide命令。# K0 L+ Y, D* T
在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按
$ Z9 c6 f' H( ?& z% g钮,再选择“应用程序”下的GUIDE命令
6 ~9 |0 W4 ]* \! {, m+ o
# u6 b* b9 R$ A; T(2)图形用户界面设计模板
# P1 j: W2 k# `2 r! f, e' R" }/ iBlank GUI (Default)9 s, j5 h. c; L+ U
GUI with Uicontrols
: z8 B; L9 [" A; |& p# m8 l1 EGUI with Axes and Menu
2 Q# [6 k1 I- v; Q6 V4 n$ a8 @Modal Question Dialog
% M6 S2 x7 S! p% K9 H7 P& ^
' B0 N0 m$ A- v(3)图形用户界面设计窗口  S; t7 i$ \+ C' s
图形用户界面设计窗口由菜单栏、 工具栏、组件选项板、界面设计区、状 态栏等部分组成。$ l" W4 D5 ?9 }9 l4 w( [, H

6 o) E: Q( H- S! K% d) O! M- p1 |, t(4)图形用户界面设计工具
2 D% L* T5 X4 U( x* g对齐对象工具, @% C0 o) f8 s' A
菜单编辑器
+ F) {" e. c* [" g0 oTab键顺序编辑器: B1 ^# I7 e+ t, F
工具栏编辑器% B1 g& h: N& }5 B) U7 U
代码编辑器1 s+ ~; ?' D& r( Q. n6 R" N# _: e5 X
对象属性检查器
4 b# }; n! y1 b. S对象浏览器
2 C9 K1 `0 U2 t. Y
% h  ^2 G( w6 [) l3 i) u. F对象属性检查器是用于检查/修改对象属性的工具。
8 r9 Q% B) G1 H. K5 l* B4 G
5 G" s+ ?8 L, R% z: A8 S菜单编辑器
+ A4 u: ]$ P' Y5 c' Y, |. u8 C菜单编辑器构成/ G2 T  N/ Z# ^5 G3 ~% G
工具栏
$ t$ w$ [4 M: f9 F' P  k8 P9 k9 s菜单列表  u9 v8 V2 S) v7 Y8 ]
菜单属性面板
% V, r7 F3 F% q( [" X" [: ~图形窗口的MenuBar属性
2 m) C9 P( J: R8 C2 d4 `figure
  d+ E& @  l9 ^  qnone
. d' M) U* ~6 z; C9 n菜单编辑器 添加自定义菜单9 ^- D; w8 U# G" ]2 i$ s
新建菜单 新建菜单项 设置菜单项属性; j3 v' }) B; g% _8 J" T  l
2 I& O; L/ Y3 ~: |+ v
对象浏览器
/ |, l) e6 v- ?3 P对象浏览器用于查看图形对象和展示界面的组织架构1 {" P) g1 f0 p, r
/ G0 J# a3 u  J) ?
回调属性与回调函数- D5 a; {1 R4 l5 [$ H# d/ ]! h
(1)回调属性
! S2 W3 @$ c  i& O. ~; ACallback属性:按钮类控件和菜单项的单击事件的默认回调属性。/ p% I) G) n, t# h: Z
CreateFcn属性:定义创建图形对象的响应。& ^& _7 x5 A# l2 p, ^3 H+ V
DeleteFcn属性:定义取消图形对象的响应。
8 q/ z0 r+ X/ }/ E7 G7 J% OButtonDowNFCn属性:定义单击鼠标键按下的响应。
2 D8 U. \8 X% vKeyPressFcn属性:定义键盘键按下的响应。
7 Z3 \/ X5 Z; N0 }# s! \9 K8 `: SSelectionChangeFcn属性:定义改变选项的响应7 s; j4 W- u9 B, K( h% L

0 O$ }2 |3 }0 ]8 ?. S4 ~(2)回调函数框架6 C9 u* [, j( P: o
function 对象标识_Callback(hObject, eventdata, handles)
& b3 ^0 R6 f' E其中,hObject为发生事件的源控件,eventdata为事件数据,handles保
+ ^- ~2 Z5 X! a5 S% `存图形界面中所有对象的句柄。6 k# p6 b6 }) j7 l
- x0 [, U4 z% W# D3 [& ?
  • %“绘图”按钮的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';
    , K9 ?! ~6 e8 _( j" C0 k

7 {, u/ A% U" T; ^3 \- F8 g9 \: ^4 ~4 |# M
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-31 13:45 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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