|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
8 L" D- O+ z, H# F文章目录
' ^3 G% ^+ ]$ s/ d" U' P前言$ g* V1 D* X: X+ t7 [ D4 J
matlab数据传递概观, Y9 f0 c/ z% M! V$ W; R, F
对话框创建
) U- L( ^2 h# w2 A1 x利用滑动条实现颜色调控+ l9 l+ ^/ T& \- I( |2 x
利用弹出式菜单选择并输入文本框
" f" L# d% p: k! ^* e利用列表框选择并输入文本框
+ L6 }( o7 Z6 Z3 }: v1 Y, j8 g3 E' o- ~( u
前言
; m/ o8 s# b9 t我觉得gui无非就是给程序加了件衣服,其实具体的程序我们都会写,我们唯一不明白的是那几个部分数据之间的传递,以及怎么获取数据处理数据。
& _1 F; p0 q& e0 Y7 q, h& l2 p% g7 N, ?) G) J @
matlab数据传递概观! M# ?$ I* X. q
在GUI的各个控件之间进行数据传递,可以采用以下两种方法,利用结构体handles和控件的UserData属性。
4 _: [8 K/ v2 N& f- H* C' X
! o0 A/ Z6 ]! n结构体handles保存了GUI的数据。当在运行GUI时,M文件会自动产生结构体handles,其中保存了所有GUI对象的数据,可以看作是一个数据的容器。用户可在handles中找到所有控件的信息。handles在各各控件的callback之间传来传去。
. h2 X+ l7 ^2 J: I2 F0 r: i3 P1 i# w; V* C, _, C
通过在结构体handles中新建字段并放置数据,可以实现数据在各个控件之间共享" s5 Z' u2 m( H
' V5 e( `8 M2 X# D! Y5 T" a- handles.a=a;
- guidata (hobject, handles); %更新0 M8 K T& B( H* C
& H7 N8 K$ l: k5 G
& v6 i! m( U f$ k在结构体handles中新建字段a,并保存变量a的值然后利用函数guidata()更新handles中的数据。则在任何需要获取该变量值的地方,可以使用如下语句:
" p- h- d1 x- q) R9 A/ ~' K) l. S/ o$ I: E* N6 i9 M
- a=handles.a;( u, h7 T/ N L" h! l
5 E/ Y3 i. Q0 n' y
& c+ j7 G2 H* P/ f8 n2 s还可以采用控件的UserData属性来保存数据。每个GUI对象都有UserData属性,可以用来存储任何类型的数据。用户可以通过函数get()获取数据,通过函数set()设置数据。除此之外,还可以将变量用global设置为全局变量,从而实现数据的共享。9 ^# ^! ]9 y; q" q1 M* A) T$ E3 l
8 G, w# u6 a% }对话框创建' S/ S6 j7 l" i& H0 ?( d' t
打开GUIDE,新建一个button,然后运行找回调函数,添加如下代码2 V d* X" b& ?& k+ h
* F) q; h, P+ j! G E+ r7 [
- function pushbutton1_Callback(hObject, eventdata, handles)
- choice=questdlg('你要关闭吗?','关闭对话框','Yes','No','No')%问题对话框,默认为No
- switch choice,
- case 'Yes'
- delete(handles.figure1);%关闭窗口
- return;
- case 'No'
- return;
- end
' G% m0 x8 S, |
6 l# d3 o I; L+ p( O
4 j/ a- y3 F7 I5 T
8 N/ V0 k" M, U8 ?) h+ Z2 l( I
; z0 O7 w. L; l8 t% Z$ U6 C利用滑动条实现颜色调控
6 P1 q: J, p r0 H, x0 E* O6 Q* BSliderStep 为[0.01 0.1] :一个是小步长,是点击slider两端的箭头移动的步长;一个是大步长,是点击slider时移动的步长
# o7 J" \8 e3 o0 O- r6 x' e6 f5 @ Z: _# }( h: M1 T8 _1 ^
- function slider1_Callback(hObject, eventdata, handles)
- val=get(hObject,'value');%通过get获取滑动条的当前值
- set(handles.text1,'BackgroundColor',[val val val]);
8 W2 S3 }7 B6 u+ B: j 2 O {( _& T, ?4 }6 _% I9 z2 |! A
( F+ D) D1 I6 M$ k5 Y效果:
" y Z }& b4 C
% i0 q8 b4 ^" N% j( C- H
* A8 @ W1 q8 l E' x
' I. p( J8 q- K
. W: V7 W4 N, {$ g4 ?6 r) w' I& b, ]; O" R* H F" Q7 D- I
! b$ J0 a* q, s
$ Q) Z+ S( ?/ c0 d
$ u5 l+ a2 ?2 R8 O. n& R9 j9 C/ f
利用弹出式菜单选择并输入文本框
& R L& M9 ?* d6 {5 ~* n! }: p, t
- function popupmenu1_Callback(hObject, eventdata, handles)
- val=get(hObject,'value');%获取数值,从上到下依次1到4
- str=get(hObject,'String');%获取字符串,这里是菜单所有的字符串,相当于存到了字符串数组里
- switch val
- case 1
- set(handles.edit1,'String','');%输入到可编辑文本里
- case 2
- set(handles.edit1,'String',str{2});
- case 3
- set(handles.edit1,'String',str{3});
- case 4
- set(handles.edit1,'String',str{4});
- end V" q5 E z4 l3 {% }, _
. A. k% k! ` u+ |/ x' f5 U- c
( ?1 t! @( a. k* p效果:
2 ^1 m y( U5 }/ d6 i* h/ J. G: B1 I# X3 L& L
+ W" c" }$ j6 j x' h/ b6 Z4 u8 [
; ^ B7 L/ w: r3 L" r3 J
7 D- u- t9 T( H* D' N3 a( S) c7 B9 k9 y1 t `: u4 y
利用列表框选择并输入文本框; a, q( A% _/ u9 \7 k6 K# K
0 b3 x$ k1 y% c# C% C- function listbox1_Callback(hObject, eventdata, handles)
- sel=get(gcf,'selectiontype');
- if strcmp(sel,'open')%如果双击鼠标
- str=get(hObject,'String');%获取字符串
- n=get(hObject,'value');%获取数值
- set(handles.edit1,'string',str{n});%在静态文本中显示
- end;
: m ?6 a2 N( I# w- d% r; V) F 2 ~& k! m7 L$ n5 \) R5 o- M* a
& e4 M/ X' Y: n7 F6 y
效果:$ P# F6 w& |+ S* Y8 g
3 K% f7 c( w7 ~% E0 i+ A2 T
, {7 m8 X$ R, b* \5 ]
6 k8 E- D3 `; O, D' a+ S
J6 k5 A% g w/ R6 {
7 [' h" Z1 i) o/ v, f
|
|