|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在制作GUI过程中会出现一种功能需求,就是读取文件, 比如选取图片文件,测试文件,Excel文件,等等
7 K5 u3 d' q2 H4 m6 v, N/ N6 X
1 e/ y& v2 _3 ~ N. ]7 L$ x& ] a& G c1 u) Y3 D- y3 I; i
今天聊一聊3种MATLAB GUI读取文件的方法# ?3 m, L- _% h H1 J+ n/ R$ C
5 Z/ B+ m4 p. x2 J
- |) h) I% c% Q& f c' Z# B
1. 输入框 ) h9 r" m% i+ o. X& o4 m
: ?7 ^* w S! r3 }7 M+ s4 f0 W0 n最容易想到的是,在GUI界面做一个输入框,然后把目标文件的路径复制进去,然后无论是通过输入框的callback,还是通过另外的其他按钮,就可以去加载文件路径了* ~9 ^9 Q7 W, I" F# I
; O; Y/ Q* _; ~2 e, k) z9 R( X. L4 U; l8 J, T5 O7 I
* \4 Q2 E5 U! e# k: P( W. g, Q/ T) k0 j$ F
/ @+ a0 r9 p* j
/ }: q9 X0 Y5 j' Q$ X: O, n
& U8 W0 I: W2 {( Y. z9 T: N u
; a5 V% P2 g0 E这种方式很容易实现,在GUIDE或者APP中选择edit控件即可,也可以通过uicontrol的方式创建编辑框
; j, X, h4 ^/ t; H/ u
$ w. i# Z( s4 m* `& }; ?/ ]7 n' l9 e u, E9 k: o
uicontrol('Style','Edit')
: x2 I# ^" g$ | i x9 q* ^
2 t3 l6 u4 }* x4 b6 M# U; N
/ T0 u4 M& x1 `- f+ T7 p4 o2. 文件选取框
4 ~& b* a O0 \0 Y
% V- p- v" X: [& o- ^; r" n输入框加载文件的方式,出现的一个问题是,GUI界面不太好看,控件布置的空间需求比较大。" |* _6 n' n6 _- N
$ U2 P$ b. w$ j1 f6 s
# [1 \) X+ g, s
所以,可以考虑第二种方式,文件选取框 D6 l* G6 b4 I3 `. l$ b
3 ` [# R" J: P0 @* P9 [* }: D7 L2 H: h* T6 V3 ?8 g4 m, S
创建一个按钮,在按钮的callback中使用uigetfile函数,就可以实现文件选取的功能了。0 a* `4 H- j3 Q. |
! L$ s. _1 g! e" m6 u
# J# c O# M- l: D1 n 3 B0 K# W3 j$ s$ x" [+ Y9 v% w
3 m9 T% p" M. A& g. @. Z
! c6 I5 N2 y7 M# l% x
& h- I0 S0 j5 A$ |& \ 2 L( F' M( t5 q9 v% ?2 O8 w
f: `9 q: e$ Z* v# n$ x# p* n不过,文件选取框一个非常明显的问题是,当文件非常多的情况下,找文件很费时间。
0 ]( z: C& y7 z. a/ F
f J2 J+ w' M! z2 N' _; \+ O1 J
7 B0 z0 r4 ] Z1 M: R- C" S, q2 b3. 文件拖拽
5 R3 I$ i2 I8 ~5 Z2 Z5 p
8 F& c6 q8 n5 v7 X w平常大家经常能看到一种选取文件的方式是,把文件拖入到软件中,文件就会自动被读取或者打开。4 h- M# U4 G9 m& v; {
1 r/ ^' n* w0 p, q% {
8 |9 s" w3 n: L
这种方式在MATLAB GUI中也是可以实现的。% ^6 n! i$ J G; f1 d
; v/ |' }8 Z2 v3 B9 J: w* W: g; @2 g; L6 i) T+ O K, z; `/ L
不过GUI中自带的控件是没有这种属性的,所以用GUIDE或者APP的形式是没办法实现这个功能,需要用脚本的方式。
% E5 @' b! r& w8 b6 z) O" \' F: l5 ?" ^* X2 @6 } p
7 \. s: o% G5 t+ l
' o" O# t2 t, m* F! [9 \* w
2 ^3 K0 w O' [% Z1 k$ R! I$ u7 H# M5 w9 y' V, [" z' s
* f; H7 E/ v! i+ j: H3 U+ f3 R3 R. x
1 P' b* w |0 s% r4 D1 Y. f; [+ Q( j! ^8 A. b
Java可以实现文件拖拽监听的功能,而MATLAB GUI是可以调用Java
) M4 n! P. j: |% u" U, \" Z% R$ E" o& G8 Y
& T, Q( ]# l. V. j) k就很容易想到实现的逻辑,在GUI中调用Java Swing,创建JButton控件,同时在定义文件拖拽监听的功能
! q. F; w' a6 u% V5 p( S
: ^* d* m9 S" c/ L( b- D
# i" X7 B- `& ~2 m, J6 m L" p! f在文件拖拽选取之后,可以直接获得文件的路径,甚至可以在这个callback的基础上再进行功能的拓展。- J1 ~) Z6 t' l; c) J# j
6 t1 W& R) S- l( y& [
0 @- O/ g1 ]. N# P$ n |
|