|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在制作GUI过程中会出现一种功能需求,就是读取文件, 比如选取图片文件,测试文件,Excel文件,等等
$ l, \) e7 x0 V! s
7 Z; D( H; t: c! a! b- S9 M. `. `% q8 H2 A) b. i! U. N
今天聊一聊3种MATLAB GUI读取文件的方法
2 |- K8 B3 [0 W: a, [7 O/ o: O
& V# \, t4 W. m* i: y5 x: Y* z4 o! c: p$ ]" M
1. 输入框 ! d$ U" ~2 L9 v: y9 Q
9 p# c- ^' J1 Y3 p% h
最容易想到的是,在GUI界面做一个输入框,然后把目标文件的路径复制进去,然后无论是通过输入框的callback,还是通过另外的其他按钮,就可以去加载文件路径了
7 L2 f6 J# i3 H: k/ j' n7 X! |! e+ F, j' B) u
: y; h" v( O' d( c* M9 d, y @8 X
! p2 E: s$ O2 `! N
% V" o8 Z4 O0 f# b7 t }2 j, T R& @% C3 [$ Y
9 Q W7 J, B* S+ _: g0 D# [
) F3 E- v: O4 e9 c3 a! e. g
% f' L1 ^/ ]) g: ~$ m这种方式很容易实现,在GUIDE或者APP中选择edit控件即可,也可以通过uicontrol的方式创建编辑框# A0 I( P8 z8 H$ l! q* R8 P
6 \7 P, Y. _: K7 n a1 o4 i7 _
, y4 P5 U6 K' O: d% B' q1 ^uicontrol('Style','Edit')
" x2 ?* J( E% |: j* n. s
/ B+ h. s5 }" N3 `4 q+ @8 J1 T3 l2 W" X* T0 n, z! g1 \
2. 文件选取框
0 |& P1 s: @: z% S+ C6 Y5 o2 ] [; o' o1 P' o
输入框加载文件的方式,出现的一个问题是,GUI界面不太好看,控件布置的空间需求比较大。
# _, A9 c; r/ g; C! w3 v0 s0 B. _" Q. A1 k" R* y" t
& ]/ {% j g4 p" d& ?4 Z所以,可以考虑第二种方式,文件选取框
& }# a6 d' t4 h: f1 O2 p* g: J* j
v9 W2 b. {0 o2 W
( G# ^/ R. g6 d3 D) C7 `创建一个按钮,在按钮的callback中使用uigetfile函数,就可以实现文件选取的功能了。
( P4 X1 S! Q" ?$ t! o" i8 C3 Y. S" S4 V, n5 u8 T" Q
* u& F* L' R' }9 s5 Q) g $ r8 a; l* ?( C- i# X
# ^8 n% ]6 X6 C5 f& h; n+ s u
( V$ N8 i3 |& M1 i! a) ^- }
3 ?+ v' v7 i- P
4 V9 P1 j- a, Q& M
6 T- x0 R2 T3 t7 d1 |- a7 U4 I9 X4 D不过,文件选取框一个非常明显的问题是,当文件非常多的情况下,找文件很费时间。
8 E( x0 G: C$ o* ]0 S9 ~1 a2 A
# q/ t2 S" P/ m+ N& ?/ o' ?* H( B! Q5 D! d+ D; Z! G: H5 d
3. 文件拖拽 2 D) j9 b5 N' k
3 C& ^! @2 ~' H$ E, _平常大家经常能看到一种选取文件的方式是,把文件拖入到软件中,文件就会自动被读取或者打开。
$ x7 u) r( @0 n' Y: R# @: \) c' g
7 } p) s8 W. V6 F$ r% C
这种方式在MATLAB GUI中也是可以实现的。
& K; a0 _3 |! T0 O' ]% b& x( c2 D8 H. h5 }# ^' u9 n( s
* q$ @! S2 q+ j. S! x0 |不过GUI中自带的控件是没有这种属性的,所以用GUIDE或者APP的形式是没办法实现这个功能,需要用脚本的方式。! Q/ ?1 X8 I9 Z( d* T
; r* p: {7 v% {. p! X
0 N- V/ y% U8 a; i* J" R) Y" C
Q( S+ u3 o( z! F& F9 r, G+ x0 O0 a4 E0 z! j
1 \* U, k: o$ ^
& {7 _/ y" J! Y1 @: K; Q & u7 `7 v7 s" ?% n
# T6 O0 F7 a' B( ~Java可以实现文件拖拽监听的功能,而MATLAB GUI是可以调用Java, X: s# Z3 f# b3 [2 _" [
" @0 _0 m( I* d; s9 [3 Q* w/ P R( {9 G
就很容易想到实现的逻辑,在GUI中调用Java Swing,创建JButton控件,同时在定义文件拖拽监听的功能
* j4 m# u& S3 _8 k8 J/ n7 ?' x# K2 `. P; X' u5 H
( r! I5 i% q' E0 F1 Z" b) i! Z
在文件拖拽选取之后,可以直接获得文件的路径,甚至可以在这个callback的基础上再进行功能的拓展。3 r5 V& V5 |8 I: m I* W
/ l) T4 y9 a/ s+ F1 o0 I0 \9 ]
5 T9 {/ v9 o: o! R& A; o/ k& q |
|