EDA365电子论坛网
标题:
大神整理的matlab GUI 设计学习笔记
[打印本页]
作者:
uperrua
时间:
2019-12-18 11:14
标题:
大神整理的matlab GUI 设计学习笔记
X9 ]! z2 o% V1 ~
图形用户界面(Graphical User Interface,GUI):
1 X; {" P! b% b
用户与计算机进行信息交流的窗口。
# x2 w" m- |; k8 p
* ]$ `6 R3 V$ \( |. I8 N+ M
设计图形用户界面的方法
5 [: F' p2 h" P% G+ g1 P/ l; P& O
调用建立用户界面控件的函数
]6 _4 J$ q1 i7 i: d
使用MATLAB提供的GUIDE工具进行可视化设计
. x+ W- | H8 x
- ]+ v4 Q6 a6 G) q3 n$ K
控件对象及其操作
9 p/ v9 D$ c1 z7 `3 ]7 k
(1)常用控件
( [1 \, M" g8 Q1 l! m$ l
输入和输出类控件:编辑框、静态文本、列表框、滑动条等。
: ?. R k N) i" [" _* E# E0 d4 P
实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等
8 R v# Q. _1 T- S
(2)建立控件对象
: o& Z) M+ u; g
函数uicontrol用于建立控件对象,其调用格式为:
9 {* y; E+ W5 B ?5 w& r# i
; l7 z5 i0 R" Q$ o5 I
句柄变量=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…)
# P; ?1 _- A/ l! I& m, G; f# M) B
0 R. t' M% ]2 c. B+ y) r9 M7 x
其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认
4 K* I9 f/ h4 ]
在当前图形窗口建立控件对象。
" C& K" i! C- ^( }* n- F
6 i1 u0 h. g% K) |
(3) 控件对象的基本控制属性
G0 G& w: L h& v( D
Style属性:定义控件对象的类型,例如‘pushbutton’表示按钮对 象,'edit’表示编辑框,等等。
, e1 f* W; E) Y0 r7 }
String属性:定义控件对象的说明文字。
- @6 ^8 V* v4 r7 q! V: y ^
Tag属性:标识控件对象。
" C" }, k2 E9 Y% d- w+ n: V3 p
Enable属性:控制控件对象是否可用。
_. e* O1 N/ B$ n% R! k
Position属性:定义控件对象的位置,其取值形式为[x,y,w,h]。
- Q+ \; O! E5 T+ T
Callback属性:其属性值是描述命令的字符串或函数句柄,当选中控 件时,系统将自动执行字符串描述的命令或调用句柄所代表的函数, 实施相关操作。
$ w" O* U; U+ A6 @5 \" `
(4)回调函数
) N7 e& X; L1 O. H! A2 k( B
回调函数定义对象怎样处理信息并响应某事件。
0 U9 i6 A. `6 ^& [# R$ r9 x/ x
回调函数的定义格式:
, j) s. M" f7 @5 W2 ^9 n9 c/ u
function 函数名(source, eventdata) …… end
9 h; L6 D* J; U
其中,参数source是发生事件的源控件对象句柄,eventdata存储事件数据。
/ l# U# a! C% o
(5)例子1
+ r5 u6 f# m1 C$ N
例1 在图形窗口中建立三个按钮对象,当单击按钮时分别绘制正弦曲 线、显示或隐藏坐标轴的网格、清除坐标轴的图形。
& K" r3 Q; t0 f, Q( _) d/ Y/ `% y
& q7 V* \8 b3 \/ @
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
% r% I& m7 y& J/ R
. O$ T7 g) q* Q
) m7 H9 M! v' Q9 g/ \+ s0 b
菜单对象
) S" S7 I0 o/ k g0 z
(1)建立菜单对象
2 A! l" P: u4 S2 J
uimenu函数用于创建、设置、修改菜单。
5 j* q0 [1 n. k4 b3 ^
建立一级菜单项的函数调用格式为:
" A L6 k/ B3 O2 h! K9 F( d+ X
一级菜单项句柄=uimenu(图形窗口句柄,属性,属性值1,属性2,属性值2,…)
/ l' f o, S) \! J" G
建立子菜单项的函数调用格式为:
/ Q$ m. M- n2 g+ i t9 @. H4 v+ z
子菜单项句柄=uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,…)
) k) g/ u# O; D) s; P. v) l
5 ]% N: h# \) T; c3 S7 K; ]
(2)菜单属性
" g7 ]5 K: K" S# W: P6 @
Label属性:定义菜单项的名字。
2 H2 g/ X) E6 c5 B4 w
Accelerator属性:定义菜单项的快捷键。
3 ~4 w) u+ A6 T, s* e* j
Checked属性:指示菜单项是否已选中。
5 |& B6 Z+ n! F% b& b$ m- H
Enable属性:控制菜单项的可选择性。
, t/ ?/ h" s& ^, f+ C9 ~' s0 V3 ~
Separator属性:在菜单项上方添加一条分隔线。
! z' d& U+ \* o/ {. W4 D! p' U
5 [/ v2 Y+ y4 Q3 a/ k
(3)例子2
- z3 O3 T4 A) ]( P8 O6 { w8 b
在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜 单项“线型”,其下又有3个子菜单项,分别为“实线”、“虚线”、 “双划线”。
- W( W$ [9 t( E/ [% a
: ~: E3 g) N; X7 W) h, Y3 \
首先运行例1的程序生成图形界面,再 运行例2程序,在界面中添加“图形选 项”菜单项,这时“线型”菜单项不 可用,单击“绘图”按钮绘制正弦函 数曲线后“线型”菜单项变为可用, 这时可以改变线型,例如双划线.
( e2 G5 Q5 q9 H# Q( g) F
( ~2 Y- J! j; x: s( D
新建一个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
$ u, P* H; Z% N6 t3 Y7 u% W
. n ~# f2 w1 o& y: X
/ [" T9 ~4 U1 A I3 {( b9 k1 a
本人觉得一些常用的函数
# D3 T6 i$ G5 L. k, T, z1 A, w
, |' }. A5 V" Q' K: J3 v
gcf返回当前Figure对象的句柄值
4 M" I" ?% Z* `4 s- F! L0 Y
) d. W& X" [7 ~ p/ {! C
h = findobj(‘PropertyName’,PropertyValue,…)
. O2 ?, E" w- \: T5 u1 f
返回所有属性名为‘PropertyName’,属性值为’PropertyValue’的图形对象的句柄。可以指定多个属性/值对
) k- M* \0 Y) y. }8 c% n
4 x$ e8 G E4 e8 \' n7 f
在当前坐标下查找所有直线对象:
' v+ J6 ^. l$ b( b
h = findobj(gca,‘Type’,‘line’) %gca为当前坐标的句柄
7 B% j5 Q" ?0 r/ z& p
/ d! u7 V: F8 Y
matlab自带用户界面设计工具GUIDE
* e: I! K1 M& l y) w
GUIDE:Graphical User Interface Development Environment
/ [$ ~# Z( J5 C0 H4 F
& c; _/ k5 y( L5 G" Q% L5 w8 B( i# h
图形界面设计窗口
) S/ ]2 s0 d5 |
& _# }3 X& W6 @
(1)打开GUIDE
t+ `/ H: C4 g0 p% P
在MATLAB命令行窗口输入guide命令。
n* w. I4 g& b& {2 I1 D" s( T
在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按
6 h2 ]. v* @& L9 G. M/ I- P) ?- T
钮,再选择“应用程序”下的GUIDE命令
; V0 O0 F2 k3 p c5 i' H' H
: R: l" J, `; q" D# o
(2)图形用户界面设计模板
1 t( [1 g Q/ w( c9 p
Blank GUI (Default)
. t; ?) p0 Q: Q' C& j
GUI with Uicontrols
5 p# v5 P( W8 t4 _3 @2 x3 b
GUI with Axes and Menu
. M$ j1 x$ L( T" T5 f* c/ e. _
Modal Question Dialog
" h( Q& A6 \ _7 M" v u
, |+ _& G- h2 x9 q9 _) y
(3)图形用户界面设计窗口
2 E+ F) G' c2 [: p: g0 S9 B5 g
图形用户界面设计窗口由菜单栏、 工具栏、组件选项板、界面设计区、状 态栏等部分组成。
/ _7 Y( s* ?$ v% D. F
( \, L+ ~2 x7 q) |! S
(4)图形用户界面设计工具
, f3 } y+ i$ Q6 `7 r
对齐对象工具
; C" v T$ b" p* C6 ^# Y b
菜单编辑器
( g) a# Q6 ]- L
Tab键顺序编辑器
. y: j- z ?8 x
工具栏编辑器
) K- W$ {/ v5 n
代码编辑器
$ n8 T, h0 L- Q! q
对象属性检查器
( B' D2 U1 d8 P' N& E
对象浏览器
" ?# Z4 q/ Q8 E1 v7 R8 }
5 D4 i$ r1 s9 X
对象属性检查器是用于检查/修改对象属性的工具。
1 b: B* P! C ^0 a
6 s/ _1 @% r8 _7 I+ ]1 p7 ?
菜单编辑器
1 E2 {9 Q. s+ T. ?- z
菜单编辑器构成
1 w6 k6 F( J/ L' t. t8 k' @
工具栏
. C3 R* V2 c' j2 b
菜单列表
2 \# w/ h: a3 E& D& }4 a
菜单属性面板
' F6 t( |9 J' O9 S' x2 V- ~ H: e+ Q; J
图形窗口的MenuBar属性
# b* P- ?# w1 P% B+ ?8 o' K1 T D! C- @6 o
figure
. j/ ?1 Y" Z0 x' L
none
# z! Q+ I- m7 z4 X0 R
菜单编辑器 添加自定义菜单
/ N, r' ~: d$ D& x
新建菜单 新建菜单项 设置菜单项属性
( [* y' r \9 A8 Z0 n6 r
: v* N) E; { P( D" g) f
对象浏览器
0 q/ a) A E; D/ v2 j
对象浏览器用于查看图形对象和展示界面的组织架构
/ B! w2 ]: A7 R6 F3 {
9 P: ?. b. J+ \# @* |. g1 A" u8 ^) z
回调属性与回调函数
! E0 `& c w2 ]6 ]% M' T
(1)回调属性
% D. n- c8 q$ D3 Q" B/ ]
Callback属性:按钮类控件和菜单项的单击事件的默认回调属性。
" o# m/ [4 O6 P; ^6 p
CreateFcn属性:定义创建图形对象的响应。
: u6 Z3 C- U3 A: r0 ~
DeleteFcn属性:定义取消图形对象的响应。
6 G+ v1 _; K# a3 f
ButtonDownFcn属性:定义单击鼠标键按下的响应。
( B; `/ P2 s# C6 k0 @( N: x3 K
KeyPressFcn属性:定义键盘键按下的响应。
3 }# c8 Y3 r( k! J5 Q
SelectionChangeFcn属性:定义改变选项的响应
3 F" K% a/ {8 z* r/ `
' w7 \2 e1 j! Z& }; D$ ]
(2)回调函数框架
9 G0 W8 ]$ F4 {1 N) b& S
function 对象标识_Callback(hObject, eventdata, handles)
, F' u! u( {; O+ D) h
其中,hObject为发生事件的源控件,eventdata为事件数据,handles保
( `# G* e' R) l6 U7 Q+ H
存图形界面中所有对象的句柄。
, r7 ~* G$ X6 O; f
; T% d( C# \" X2 w% m$ A
%“绘图”按钮的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 G1 e% h0 }0 _+ Z
' E- m' a* o. ?+ u
2 f$ T* @0 F3 V" L' d5 v# b, o
作者:
xixihahaheihei
时间:
2019-12-18 17:39
赞赞赞
作者:
relchhiclty
时间:
2019-12-20 18:17
学习了
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2