|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在制作GUI过程中会出现一种功能需求,就是读取文件, 比如选取图片文件,测试文件,Excel文件,等等* R" G$ v9 @2 Y5 t) n
- L4 T* S/ h+ g& I
# v5 d8 Y1 n4 @; I' X* K% n8 j今天聊一聊3种MATLAB GUI读取文件的方法
2 }0 Y7 R1 ~# W6 D: P4 B' D8 m4 B. z2 E( y' ]) a
1 e( W. }6 X9 c6 E4 L1. 输入框
6 ^9 w1 S" p! W5 \$ A+ Y) f0 K5 A. y
最容易想到的是,在GUI界面做一个输入框,然后把目标文件的路径复制进去,然后无论是通过输入框的callback,还是通过另外的其他按钮,就可以去加载文件路径了
, h, m' v- Z$ Q$ ?7 u, P. N9 z; I
2 S* T' A8 [4 F+ a# h9 F
3 v4 Z" z4 l& Q# J, G& P3 | & B) I# x3 u* f6 L* H0 T' @
/ ?6 p1 \: H4 U* y2 Z
' R# b! C3 r3 v3 }
$ G+ C* s4 {! S" A5 Q ; |1 n+ W( M5 W4 R1 l
3 o" H T, k# Q9 R( C$ Z" z2 w
这种方式很容易实现,在GUIDE或者APP中选择edit控件即可,也可以通过uicontrol的方式创建编辑框2 |8 K+ u8 r* ` H+ Y
N3 y7 K; [# C# M- a. t
" l6 U- [9 A* ^- |! nuicontrol('Style','Edit')6 b. A4 K+ s3 d4 ?* ^8 d; N# s
+ z+ ]( S0 U1 S0 K4 x1 ?% y0 u
4 C2 P4 t- s1 m1 M B- h+ R, \2. 文件选取框 . |7 b/ F% z v& Z# { R
: N$ o: f1 `0 m( ?8 [. R输入框加载文件的方式,出现的一个问题是,GUI界面不太好看,控件布置的空间需求比较大。
3 I8 m. ]0 ^+ P" t. h7 k+ a6 d
( t4 E" P) D$ H, P, y p# Y8 Q8 z0 y( J. _ O
所以,可以考虑第二种方式,文件选取框
) i4 Q$ A3 S1 {, m* T8 f/ ] G5 ~5 t& h8 Q+ }! z
& e3 S: a# i3 x7 r: M/ m U创建一个按钮,在按钮的callback中使用uigetfile函数,就可以实现文件选取的功能了。& W; e$ w3 I G3 }
) V+ U' _; K& s5 d& d
! ~ Z) b$ O+ ~; Z. F$ A( Z& |9 K
* G5 c: O0 n& }+ `, B& ?0 d& C! `' v `! y. Y6 c
' W- M: k: v7 v8 p, x9 n/ x) v/ U
9 |- K3 H: J; s0 S. e) ~- P; R9 n) L$ [/ _
不过,文件选取框一个非常明显的问题是,当文件非常多的情况下,找文件很费时间。( C! T W0 n& M, S, n
8 y; x" f1 t' J& @0 H" P
4 d6 N% B0 F6 T8 X, G6 Q3. 文件拖拽 5 v& K* z2 [% |4 x ^5 H+ T1 a* b, e
# R! z3 ] K, `! @平常大家经常能看到一种选取文件的方式是,把文件拖入到软件中,文件就会自动被读取或者打开。1 a3 ~9 }' |3 y2 r
; C( V$ o9 z8 w4 e3 k8 F' \) |
* d% s' `) h ~( g6 p这种方式在MATLAB GUI中也是可以实现的。
5 v/ Z+ l6 ] z$ l9 M4 @" |3 m, k, X3 q" a7 i
, S) X$ P/ g* u
不过GUI中自带的控件是没有这种属性的,所以用GUIDE或者APP的形式是没办法实现这个功能,需要用脚本的方式。
8 o/ e! R/ a! m5 O1 b) [3 _- Z
, q& O o% e( t6 @! p
5 L) I6 ^4 J5 b% F / ^$ I, j4 Z9 G# Q5 {) B' S" d
" v% H% ~( J$ r; M% u0 y1 g5 A) z2 z
$ E/ u. s. J" x7 V5 H8 O, Z3 ^
: W9 l+ G7 S% g: v) W2 V" M
8 j. e4 z( k/ a% d4 ]8 ~8 e
Java可以实现文件拖拽监听的功能,而MATLAB GUI是可以调用Java$ q* y# `1 U2 ?
* x2 ?7 @# U8 m6 n
8 N* N2 s/ H H; P D. Y( c9 {就很容易想到实现的逻辑,在GUI中调用Java Swing,创建JButton控件,同时在定义文件拖拽监听的功能
, x, Y; M. V# M6 O7 _+ {
# @) J" n' o; l; d2 A" ~
) M- n- p9 D2 t9 ]8 K7 [' F在文件拖拽选取之后,可以直接获得文件的路径,甚至可以在这个callback的基础上再进行功能的拓展。# `3 l5 d4 w0 O$ \. W$ q+ w5 q2 h! m/ l
) E$ c7 c! E' Q4 ]
. m1 q. M4 r8 ] |
|