|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1 N5 B& {( M; X2 U9 M) r5 Q文章目录
- | @! n) F+ v前言( G( H. w9 j& [: Q* E7 A1 V) [! f
matlab数据传递概观
7 v! C8 r! N3 h1 X9 L对话框创建$ ]. P, y' P9 _4 ?
利用滑动条实现颜色调控
3 B2 |. W1 w, E( L! ?) d9 h利用弹出式菜单选择并输入文本框
" A/ P) u& o, Q利用列表框选择并输入文本框
6 b2 E1 ^! R% j* q8 [+ z T$ c3 e9 Z4 w
前言) r5 t- L4 ^" D! z' ]
我觉得gui无非就是给程序加了件衣服,其实具体的程序我们都会写,我们唯一不明白的是那几个部分数据之间的传递,以及怎么获取数据处理数据。
( i* y) j2 F/ s- R2 H7 _0 p) ?. |' [( Q: s8 ~- T* B1 z! K, F' ^
matlab数据传递概观* \' S! g7 T3 a0 k ^" d
在GUI的各个控件之间进行数据传递,可以采用以下两种方法,利用结构体handles和控件的UserData属性。6 P' _+ `, Z' U* N
% f; m8 n8 s1 p! t( V" ^结构体handles保存了GUI的数据。当在运行GUI时,M文件会自动产生结构体handles,其中保存了所有GUI对象的数据,可以看作是一个数据的容器。用户可在handles中找到所有控件的信息。handles在各各控件的callback之间传来传去。/ }% c+ t: `) }% J0 i
" c0 U: E X, E; _; G6 V2 S- i, |
通过在结构体handles中新建字段并放置数据,可以实现数据在各个控件之间共享
* M% _9 s1 n3 V% _) @& t9 Z; ?
- u0 \% k+ A9 {5 U6 d J- handles.a=a;
- guidata (hobject, handles); %更新* D/ L; I3 h$ s$ N! t" A
) q' M4 e0 G, u9 E+ K
& J4 t& y7 Q1 j1 b j. f+ N8 _
在结构体handles中新建字段a,并保存变量a的值然后利用函数guidata()更新handles中的数据。则在任何需要获取该变量值的地方,可以使用如下语句:, B8 A: g& k4 v/ N1 r! J
1 D+ N& g0 c3 Z$ U- a=handles.a;3 R9 k" P8 D5 h6 B* H7 b
6 v, X& N/ ~$ I1 K% _1 \) _0 [! ]3 d
0 A0 K% s% b3 ?* A6 q3 H* V/ j2 Z还可以采用控件的UserData属性来保存数据。每个GUI对象都有UserData属性,可以用来存储任何类型的数据。用户可以通过函数get()获取数据,通过函数set()设置数据。除此之外,还可以将变量用global设置为全局变量,从而实现数据的共享。2 t+ x! f% J7 ?& f7 E, d0 q
! v, `# k& c5 o& G对话框创建
" W `9 v' L4 ?2 s2 N+ O打开GUIDE,新建一个button,然后运行找回调函数,添加如下代码% K* b( q8 j# |" y" z h
% y2 Y- ]) ?+ I7 {- N5 I
- function pushbutton1_Callback(hObject, eventdata, handles)
- choice=questdlg('你要关闭吗?','关闭对话框','Yes','No','No')%问题对话框,默认为No
- switch choice,
- case 'Yes'
- delete(handles.figure1);%关闭窗口
- return;
- case 'No'
- return;
- end
/ r( b3 v3 X' T2 B N " ^% D5 ?) F7 Q9 Z i
8 o8 s3 ?# ]0 ~! `) Y { h8 n5 u5 ?
/ H' t% a6 Z1 m! I( ]) F+ g
利用滑动条实现颜色调控" v3 k$ l6 e6 `: F) l! A
SliderStep 为[0.01 0.1] :一个是小步长,是点击slider两端的箭头移动的步长;一个是大步长,是点击slider时移动的步长* F( C: J7 b b. l! j( N- J3 i3 n
, \1 _/ h+ ~4 \( j
- function slider1_Callback(hObject, eventdata, handles)
- val=get(hObject,'value');%通过get获取滑动条的当前值
- set(handles.text1,'BackgroundColor',[val val val]);3 L( p" G/ T- H" l6 k
8 Z& C5 I$ _% p3 o$ J/ ?( R- Y3 s. F4 R; U# g, t8 v
效果:( N- u3 c" ?+ e9 G! ~1 C# b
v: H" z/ X1 c2 G, ^
5 s& I% l6 G. n ?" I; u
6 I9 g5 D% |0 Q6 r b' G4 I
8 j9 s7 U0 t: d
" v% L4 R' J( U, d8 G
6 S# q2 n8 c3 ~0 C4 A
1 y% ^* v! F5 l. {, O" i6 i
( k/ A' j, F9 g2 T* j, k8 D利用弹出式菜单选择并输入文本框% Z# D5 {- |: e- @4 m" N
1 o! G: N: Y7 A7 V) c- 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
6 t1 x( J N" z
3 ~: B3 L' S% t+ x$ h3 t. o$ u+ I5 u# B) I: O7 Q
效果:/ s* R' f' k2 f/ W" O
4 ^- D5 X, T0 B/ E8 j
' R; I: ]+ F* C `; l
9 R5 M' S( E+ h9 M; g& `
& Q+ h! l6 n' ~# o. Y
0 z1 M5 \. c, T- \
" V9 F2 B E, o9 X4 Z
利用列表框选择并输入文本框
5 Y \- |0 S7 `& N. P) t6 u8 r# k; O8 ~0 y }' t% Y' m' e
- 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;
: W2 j% x; x4 ]) d: e- M 3 L! \9 \8 o# l1 p+ ?0 L
9 s, n- k" i5 V" Z" Q1 h效果:
# H n- s6 x0 X" n) y- Y7 U0 k2 ^1 |. R! k% h& a
+ Z% j3 z; U( N V
' q3 y5 L7 E# \8 I
6 A; r' j$ {9 D; W1 ~
- \2 S; U8 p. g. b |
|