Professional Documents
Culture Documents
Matlab GUI
Matlab GUI
com)
배포처 : MATLAB 전문학교 (http:/ / matlabschool.com)
우선, M atlab 으로 작성 할 수 있는 GU I 프로그램 요소들이 갖는 의미부터 알아보도록 하
자.
m atlab5.0에서 만들어진 *.m at file은 단순히, GUI에 관련된 dat a들만 저장하였다. 그래서,
GU I 프로그램을 만들기 위해서는 *.m file에서 고전적인 재 귀 호 출 방법을 사용해야 했었다.
그러나, m atlab6.0에서 만들어지는 *.fig file은 GUI 프로그램을 작성하는 데 필요한 재귀 호
출 r ou tin e을 포함하고 있으므로, *.m file에서는 단순히, ev en t만 처리하면, 쉽게 GUI
pr og ram 을 작성할 수 있다.
- 1 -
[그림 1] M atlab 5.X GUI와 M atlab6.X GUI의 차이점.
그러나, m atlab 6.0에서 gu ide.m 함수를 사용하여 [그림 1]과 같은 GUI프로그램을 만들고,
M atlab GUI.m 으로 저장하면, gu ide.m 함수가 자동으로 M atlab GUI.fig file을 만들어 준다.
이제, M atlab GU I.m 함수를 실행하면, M atlab GUI.fig file이 호출되어 [그림 1]과 같은 GUI를
초기화하여 발생시킨다.
이제, 버튼을 click하여 ev ent를 발생시키면, M atlab GUI.m 함수가 ev en t를 처리하고, 다시,
M atlab GUI.fig file을 호출하여 버튼 click ev ent를 반영한 새로운 GUI로 갱신해 준다.
그러므로, ev ent가 발생할 때마다 M atlab GUI.m 함수는 ev en t를 처리해주는 r ou tin e만 codin g
하면, GUI를 갱신하는 것은 M atlab GUI.fig가 알아서 처리하므로, m atlab5.0과 같이 복잡한
재귀 호출을 직접 codin g하지 않아도 된다.
- 2 -
[그림 2] GU IDem o.m
주의 :
필자가 그 동안 많은 m atlab 강의를 해본 결과, 기존에 V isu al C ++, Visu al Ba sic
등으로 GU I pr ogr am 을 작성해 본적이 있는 분들은 다음에 설명할 내용이 쉽게 이
해가 가겠지만, GU I code를 처음 작성하는 분들은 다음의 내용들이 쉽게 이해가
되지 않을 것이라고 본다.
그러나, 처음에는 대충, m atlab으로 GUI pr og r am 을 만드는 대략적인 방법만 알아
두고, 다시 처음부터 보면, 이전에 이해하지 못한 부분들이 쉽게 이해가 될 것이라
고 생각한다.
그러므로, 다음에 주어진 내용들은 적어도 GUI를 처음 하는 분들이라면, 3번은 읽
어보아야 할 것이다.
- 3 -
1. Uicontr ol Object의 GUI요소 사용 방법 :
*Pu sh Bu tt on
*Ch eck B ox
*P op - up m en u s
*Radio butt on s
*Slider
*E dit able tex t
*Static tex t
*fr am e
*List Box
- 4 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
[그림1- 1]은 Uicon tr ol" Object s에 속하는 요소(pr op erty n am e )들을 나타내 본 것이다.
- 5 -
1. Uicon trol Object의 GUI요소 사용 방법
[그림 1- 2 ] GUIDe mo .m
g uide.m 함수는 GUI 요소들(즉, 버튼, slider등등)을 figu r e object에 배치시키고, 기본적인 기
능을 부여하며, 해당 *.m file과 *.fig file을 만들어 주는 함수이다.
m atlab5.0이후부터 소개된 g uide.m 함수는 m atlab6.0에서 그 기능이 상당히 향상되어 쉽게
사용자가 GUI pr ogr am 을 작성할 수 있게 도와 준다.
이제, [그림 1- 2]의 GU I 프로그램에서 Uicontr ol을 제작하는 것부터 설명해 나가겠다.
□gu ide
- 6 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
[그림 1- 3]의 Lay out E dit or는 다음과 같은 부가적인 lay ou t t ools를 가지고 있다.
1) A lig nm en t T ool : 각각의 Com pon ent를 사용자가 원하는 위치로 정렬하는 것을 도와
준다.
2) P roperty In spect or : 해당 com pon ent의 property v alu e에 대한 edit or .
3 ) Object Br ow ser : Lay ou t A r ea에서 첨가한 com p on ent에 대한 객체들의 계층도를 보
여준다.
4 ) M enu E ditor : w in dow m enu 와 con tex t m enu 에 대한 E ditor .
- 7 -
1. Uicon trol Object의 GUI요소 사용 방법
A x es Object가 생성 될 것이다.
- 8 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
이제, [그림 1- 3]의 Ob j e c t B ro w s e r icon을 click 하면, [그림 1- 6]과 같이 Object Br ow ser
w in dow 가 나타난다.
현재, Lay out E ditor상에서 존재하는 Object는 F igu r e Object와 그 low er lev el인 ax es
object , 이렇게 2개가 존재한다는 것을 보여주고 있다.
앞으로, [그림 1- 3]의 Lay ou t A r ea에 첨가되는 모든 Com p on ent s는 [그림 1- 6]에 계층별로
첨가될 것이다.
임의의 object it em , 예를 들면, ax es (ax es 1) object를 m ou s e로 dou ble click하면, 해당
P roperty In spect or w in dow 가 나타난다.
여기서, m in u s 기 호 (즉 , - ) 은 해당 객체의 low lev el Object s가 아래에 나열되어 있다는
것을 말해준다.
즉, fig ur e Object의 low lev el Object인 A x es Object가 figu r e Obj ect의 아래에 표시되어 있
는 뜻이다.
그러나, plu s 기 호 (즉 , + ) 은 해당 객체의 low lev el Object s가 아래에 나와 있지 않다는
것을 의미한다.
그러므로, A x es Object의 low lev el Object s를 편집하기 위해서는 plu s 기 호 를 m ou se로
클릭하면 된다. 그러면, A x es Object의 하위 lev el object s가 A x es object it em 아래에 나열
된다.
2편 에 서 계 속 ...
- 9 -
1. Uicon trol Object의 GUI요소 사용 방법
- 10 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
주의 :
m atlab5.0에서는 m ou se로 선택한 obj ect를 delet e k ey 로 지울 수 없고, 해당 delet e
m en u를 선택해야한다.
- 11 -
1. Uicon trol Object의 GUI요소 사용 방법
- 12 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
정리하면, 정렬하고자 원하는 obj ect s를 선택하고, 선택된 object s를 포함하는 최소한의 직사
각형인 b oun din g b ox 를 기준으로 정렬 icon을 click하면, 원하는 정렬이 이루어진다.
솔직히, g uide lin e은 object s의 정렬을 수행하는데, 어떠한 영향을 미치지는 않는다.
또한, object를 click한 순서에 따라서 정렬되는 것이 아니라, 오로지 b oun din g b ox 를 기준
으로 정렬이 수행된다는 점에 주의하자.
- 13 -
1. Uicon trol Object의 GUI요소 사용 방법
이들 3개의 slider의 폭(w idth )과 높이(h eigh t )의 길이를 같게 하기 위해서는 [그림 1- 12]와
같이 3개의 slider를 모두 선택한 상태에서 Pr operty In spect or icon 을 선택하거나, m ou s e의
오른쪽 버튼을 click하여 [그림 1- 13]과 같은 popup m en u를 발생시켜서 Pr operty In spector
m en u를 선택한다.
그러면, [그림 1- 14]와 같이, 3개의 slider에 속하는 property n am e을 동시에 조정할 수 있는
P roperty In spect or w in dow 가 나타난다.
- 14 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
각각의 pr op erty n am e에 속하는 pr operty v alu e를 편집해 주기 위해서는, 우선, 편집해 주고싶
은 pr op erty n am e을 m ou se로 선택한다, 그러면, [그림 1- 15]와 같이 진한 녹색으로 선택한,
pr operty n am e이 표시된다. 이때, 원하는 pr op erty v alu e를 ty pin g 해주면 된다.
pr operty v alu e를 편집한 뒤에는 반드시 Lay out E dit or의 저장 버튼을 click해 주어야 편집된
내용이 반영된다.
- 15 -
1. Uicon trol Object의 GUI요소 사용 방법
이제, 3개의 slider들 사이의 폭을 align m ent t ool을 사용하여 적당하게 분포시켜 주기 위해
서 [그림 1- 16]과 같이 설정해 준다.(distribu tion )
지금까지 여러분들은 m atlab 6.0에서 제공하는 alig nm en t t ool을 사용하는 방법을 배웠다.
앞으로의 object s의 설정 방법을 보다 쉽게 배우기 위해서, [그림 1- 17]과 같이 P refer en ces
m en u를 선택하여 준다.
그러면, [그림 1- 18]과 같이, pr efer en ce w in dow 가 나타날 것이다.
여기서, "Sh ow n am es in com pon en t palett e"을 선택하고 OK버튼을 click해 준다.
- 16 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
- 17 -
1. Uicon trol Object의 GUI요소 사용 방법
- 18 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
- 19 -
1. Uicon trol Object의 GUI요소 사용 방법
- 20 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
이제, 여러분들은 지금까지 배운 방법으로, [그림 1- 2]와 같이 각각의 com pon ent들을 위치
시키고, 정렬하고, 초기 문자열들을 설정해 줄 수 있을 것이다.
모든, com pon en t들을 [그림 1- 2]와 같이 위치시켜 주면, [그림 1- 24]와 같이 될 것이다.
이제, 여러분이 만든 GUIDem o.m 함수를 m atlab의 desk top에 있는 com m an d w in dow 에서
다음과 같이 실행해 보자.
- 21 -
1. Uicon trol Object의 GUI요소 사용 방법
여기서, 여러분이 주의할 것은 gu ide.m 함수에 의해서 만들어지는 모든 GUI fig ur e object의
h an dle은 H an dle V i s ib ilit y 가 o f f라는 것이다.
- 22 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
이것은, 사용자가 실수로 g uide.m 함수에 의해서 만들어진 GUI fig ur e object를 편집하지 못
하도록 하기 위해서이다.
또한, g uide .m 함수에 의해서 만들어지는 fig ur e obj ect의 h an dle v alu e는 자연수가 아니라,
소수로 주어지게 되어 있다.
이제, p eak s .m 함수를 실행하였을 때, p eak s에 해당하는 그래프가 [그림 1- 25]의 ax es object
에 쏙 들어가도록 하기 위해서는 다시 g uide.m 함수를 실행하여, GUID em o.fig file을 불러오
고, fig ur e object에 해당하는 부분을 m ou se로 dou ble click하거나, 또는 object br ow s er에서
figu re object를 m ou se로 dou ble click하면, [그림 1- 27]과 같이 Pr op erty In spector w in dow
가 나타날 것이다.
여기서, pr operty n am e 중에서,h an dlev isibility 의 pr op erty v alu e가 o f f 로 되어 있는 것을 볼
수 있다. 이것을 o n 으로 바꾸어 주자.
그리고, 저장한 뒤에, 다시, GUIDem o.m 함수를 실행하고, peak s .m 함수를 실행하면, peak s .m
함수에 해당하는 그래프가 GUIDem o.m 함수의 ax es object에 쏙 들어가 있는 것을 볼 수 있
을 것이다.
그러나, 이 fig ur e object의 h an dle v alu e는 1 이 아니라, m atlab이 난수적으로 소수를 할당
한 것을 조사할 수 있을 것이다.
그러므로, GUID em o.m 함수의 figu re object의 h an dle v alu e로 일반적인 fig ur e object의
h an dle v alu e처럼, 자연수로 할당하기 위해서는 [그림 1- 27]에 있는 In t e g e rH a n dle 의
pr operty v alu e를 o n 으로 해 주어야 한다.
그리고, [그림 1- 25]에 있는 GUIDem o.m 함수의 fig ur e obj ect에는 m en ub ar가 없고, fig ur e
title도 u ntitled로 되어 있다.
먼저, figu re object의 m enu b ar를 정상적으로 보여주기 위해서는 [그림 1- 27]의 m en ub ar
pr operty n am e의 property v alu e를 f ig u re 로 바꾸어 주어야 하고, fig ur e title을 바꾸어 주기
- 23 -
1. Uicon trol Object의 GUI요소 사용 방법
- 24 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
[그림 1- 29 ]
- 25 -
1. Uicon trol Object의 GUI요소 사용 방법
1) R esize Beh av ior option : 이것은 g uide 함수로 만들어질 fig ur e object의 r esize
pr op erty n am e에 대한 것이다.
(1) N on - r esizable : g uide함수로 만들어진 figu r e object는 크기를 m ou s e로 조정할 수
없는 w in dow 가 된다.(d e f au lt )
(2) Pr oportion al : m atlab이 자동으로 GUI progr am 에 있는 여러 com pon ent s의 크기를
figu re object의 크기에 비례하게 조절해 준다.
- 26 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
우선, [그림 1- 2]와 같이 GUID em o.m 함수를 design 하는 방법은 모두 배웠으므로, gu ide 함
수의 F ile/ N e w m enu 를 선택하여 새로운 con trolled st at e에 있는 fig ur e object를 만들고,
GU IDem o.fig file에서 E dit/ S e le c t A ll m en u를 선택하고, c trl +c 를 하고, 새로 만든 figu r e
object에 c t rl +v 를 하여 pa ste해준다.
그리고, GUIDem o.m 의 figu re object와 크기가 같도록 pr operty In sp ect or를 사용하여
p osition의 값을 동일하게 한다. 물론, 2개의 figu r e obj ect에 U n it s 도 동일해야 한다.
- 27 -
1. Uicon trol Object의 GUI요소 사용 방법
%%%%%%%%%%%%%%%%%%%% te st .m %%%%%%%%%%%%%%%%%%%%%
fu n ction v ararg ou t = t est (v ar ar gin )
% T E ST A pplication M - file for te st .fig
% F IG = T E ST lau n ch test GUI.
% T E ST (' callb ack _n am e ' , ...) in v ok e th e n am ed callb a ck .
% La st M odified by GUIDE v 2.0 17 - Ju l- 2001 19 :43 :44
▶ ①
if n ar gin == 0 % LA U N CH GUI
fig = open fig (m filen am e,'r eu se ' ); ▶ ②
% U s e sy st em color s ch em e for fig ur e :
set (fig ,' Color ' ,g et (0,' defaultUicontr olBack gr oun dColor ' ));
% Gen er at e a stru ctur e of h an dle s to pa s s to callb ack s , an d st or e it .
h an dles = g uih an dles (fig ); ▶ ③
g uidat a (fig , h an dles ); ▶ ④
if n ar g out > 0
v ar ar g out {1} = fig ;
- 28 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
en d
elseif isch ar (v ar ar gin {1}) % INV OKE NA M ED SUBF UN CT ION OR CA LLBA CK
try
[v ar ar g ou t {1:n ar g out }] = fev al(v ar ar gin {:}); % F EV A L s w it chy ard
cat ch
disp (la st err );
en d
en d
%%%%%%%%%%%%%%%%%%%% te st .m %%%%%%%%%%%%%%%%%%%%%
② lin e에서 사용되는 open fig .m 함수의 전형적인 사용 방법은 다음과 같다.
- 29 -
1. Uicon trol Object의 GUI요소 사용 방법
결국, ② lin e을 수행하면, 현재, GUI figu re의 h an dle을 얻을 수 있고, 반환된 h an dle은 fig
변수에 저장된다.
h an dles =
fig ur e1: 1
pu shb utton 1: 123.0005
t ex t 14 : 122.0005
t ex t 13 : 121.0005
t ex t 12: 120.0005
t ex t 11: 119.0005
t og glebu tt on 1: 118.0005
t ex t 10: 117.0005
t ex t9 : 116.0005
edit 2: 115.0005
edit 1: 114.0005
t ex t8 : 113.0005
popupm enu 1: 112.0005
t ex t7 : 111.0005
listb ox 1: 110.0005
t ex t6 : 109.0005
ch eck b ox 3 : 108.0005
ch eck b ox 2: 107.0005
ch eck b ox 1: 106.0005
t ex t5 : 15.0009
r adiobutt on 3 : 14.0009
r adiobutt on 2: 13.0009
r adiobutt on 1: 12.0009
t ex t4 : 11.0009
t ex t3 : 10.0009
t ex t 2: 9.0009
- 30 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
t ex t 1: 8.0009
slider3 : 7.0009
slider 2: 6.0009
slider 1: 5.0009
fr am e2: 4.0012
fr am e1: 105.0005
ax es 1: 100.0005
4 편 에 서 계 속 ...
(이어지는 내용 ☞ gu ih an dle s의 전형적인 사용 방법)
- 31 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법
% --------------------------------------------------------------------
function v ararg out = L sitM arkF ace_Callba ck (h , ev ent dat a , h andles , v ar ar gin )
% Stub for Callback of the uicontr ol han dles .L sitM arkF ace.
GUIDem o( 'listbox 1_Callback ' ,gcbo,[],guidata (g cbo)) ▶ ①
①번 line은 삭제하고, 다음과 같은 code를 첨가해 본다.
M ark erE dg eColor =g et (h ,' string ' ); ▶ ②
주의 :
M ark erE dg eColor에는 listbox 에 있는 모든 it em 의 문자열들이 cell dat a type으로 저
장되어 있다는 데 주의하자!
M arkerE dgeColor =
'r '
'g '
'b '
'c '
- 49 -
1. Uicontrol Object의 GUI요소 사용 방법
'm '
'y '
'k '
'w '
an s =
cell
주의 :
listb ox 와 popupm enu에 포함되어 있는 it em 들의 index 는 1 부터 시작한다는 데 주
의하자.
- 50 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법
listb ox 에 첨가한 code와 비교해 볼 때, 단지, m arker의 edg e color를 제어하기 위해서,
m arkerfacecolor pr opertynam e 대신에 m arkeredg ecolor를 첨가한 것만 다른 것을 알 수 있
을 것이다.
이제, 저장하고, te st .m 함수를 실행해 보자.
우선, m arker type에서 Diam on d r adiobutton을 click하고, popupm enu에서 적당한 m arker
edg e color를 선택한다.
그러면, ax es object에 있는 line의 m arker edge color가 popupm enu에서 선택한 color로 바
뀌는 것을 알 수 있을 것이다.
[그림 1- 40(a )]와 같이 t og glebutt on이 눌린 상태에는 v alu e 가 1 이고, r elea sed st at e에서는
v alu e가 0 이 된다.
GUIDem o.m 함수에서는 t ogglebutton을 이용하여 F igur e Object의 크기를 조절하고 있다.
즉, 현재 figur e object의 크기는 [232 269 739 409]인데, t ogglebutton을 click하면, figur e
object의 크기가 [232 269 529 409]과 같이 폭(w idth )이 739에서 529로 작아지도록 만들
것이다. 물론, unit s는 pix els로 동일하다.
위와 같이 togglebutt on을 사용하기 위해서는 먼저 guide함수에 callback함수의 prot ocol을
t est .m 함수에 첨가해 주어야 한다.
그리고, 다음과 같이 coding해 주면 될 것이다.
- 51 -
1. Uicontrol Object의 GUI요소 사용 방법
우선, ①번 line과 같이 현재 figur e object의 크기를 Curr entF igur eP os에 저장한다.
그리고, t og glebutt on이 눌려 지면, figur e의 폭이 작아지고, togglebutt on이 r elea se되면, 다
시 원래의 figur e 크기로 돌아가도록 만들 것이다.
그러므로, t og glebutt on이 눌린 경우에는 v alue가 1 이라고 하였으므로, t ogglebutton이 눌
리면, g et (h ,'v alu e ' )는 1 을 반환하여 참 (tru e )이 된다. 이때에는 figur e의 폭만 바꾸어 줄
것이므로, ③번 line과 같이 codin g하면 된다. 그리고, togglebutt on에 M ore > > 과 같은 문자
열을 첨가해 주면 된다.
그러나, 만일, t og glebutt on이 r elea s e 상태라면, get (h ,'v alue ' )는 0 을 반환할 것이므로, ⑤
번 lin e과 같이 원래 figur e의 크기로 조정해 주면 된다. 그리고, L e s s < < 문자열을
t ogglebutton에 첨가해 주면 된다.
그러나, 만일, ⑤번 lin e대신에 ⑥번 lin e과 같이 coding하면 figur e의 원래 크기로 되돌아가
지 못한다.
그 이유는 무엇일까?
만일, 독자 중에서 정확한 대답을 할 수 있다면, m atlab의 w o rk s pa c e 에 대한 개념을 재대
로 이해하고 있는 것이다.
이 문제에 대한 대답은 독자 여러분들에게 맡기도록 하겠다.
- 52 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법
- 53 -
1. Uicontrol Object의 GUI요소 사용 방법
그런데, 만약, M ark er type을 A st erisk로 설정한 경우에는 M arker F a ce Color가 아무런 의
미도 없게 된다.
왜냐하면, A st erisk는 face (임의의 폐공간)가 없기 때문이다.
결국, A st erisk를 선택하면, M arker F a ce Color를 u s er가 선택할 수 없도록 ListB ox 를 비활
성화 해 주어야 한다.
이처럼, 임의의 uicontr ol, uim enu , uicontextm enu 각각의 it em 을 비활성화해 주기위해서는
e n a ble pr opertyn am e을 사용하여야 한다.
enable pr opertynam e에는 다음과 같이 3가지 성질이 있다.
여기서, 주의 할 것은 en able의 In activ e propertyv alue는 uicontrol com pon ent에 대해서만
유효하다.
- 54 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법
- 55 -
1. Uicontrol Object의 GUI요소 사용 방법
다음과 같이 명령하면, [그림 1- 50]과 같이 M arker F ace Color " 문자열이 비활성화 된 것
을 볼 수 있다.
이제, A st erisk r adiobutt on을 click하면, Listbox 와 M arker F ace Color " 문자열이 모두 비
활성화 되도록 설정해 보자.
그러기 위해서는 A sterisk의 callback함수인 AM arkR d_Callback에 다음과 같이 listbox 를 비
활성해 해 주는 r outine을 첨가해 주면 된다.
set (han dles .L sitM arkF ace,' enable ' ,' off ' )
set (han dles .L sitM arkF aceT x t ,' enable ' ,' off ' )
그리고, A st erisk r adiobutton을 click해 보면, listb ox 와 M ark er F ace Color " 문자열이 모두
비활성화 된 것을 볼 수 있을 것이다.
그러나, 다시 다른 compon ent를 click하면, 계속해서 listbox와 문자열들이 모두 비활성화 된
상태로 남아 있는 것을 볼 수 있다.
그렇다면, 어떻게 해야, 다른 com pon ent를 click할 때, listbox와 해당 문자열을 다시 activ e
state로 만들 수 있을 까?
이 문제를 쉽게 해결할 수 있다면, 이제, 여러분은 m atlab의 guide함수를 사용한 GUI
m echanism 을 모두 배웠다고 보아도 된다.
- 56 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법
%%%%%%%%%%%%%%%%% te st .m %%%%%%%%%%%%%%%%%%%%%%
elseif ischar (v ar ar gin {1}) % INVOKE NAM ED SUBF UN CT ION OR CALLBA CK
try
[v ar ar g out {1:n ar gout }] = fev al(v ar ar gin {:}); % F EVAL s w it chy ard ▶ ①
cat ch
disp (la st err );
en d
end
%%%%%%%%%%%%%%%%% te st .m %%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%% te st .m %%%%%%%%%%%%%%%%%%%%%%
elseif ischar (v ar ar gin {1}) % INVOKE NAM ED SUBF UN CT ION OR CALLBA CK
try
han dles =guidata (gcbo);
if han dles .ListBox Off ==1 ▶ ①
h andle s .ListB ox Off =0; ▶ ②
s et (han dles .L sitM arkF ace,' en able ' ,' on ' )
s et (han dles .L sitM arkF aceT x t ,' enable ' ,' on ' )
guidata (gcbo,handles );
end ;
[v ar ar g out {1:n ar gout }] = fev al(v ar ar gin {:}); % F EVAL s w it chy ard
cat ch
disp (la st err );
en d
end
%%%%%%%%%%%%%%%%% te st .m %%%%%%%%%%%%%%%%%%%%%%
- 57 -
1. Uicontrol Object의 GUI요소 사용 방법
- 58 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법
set (h andles .BVal,' strin g ' ,num 2str (Curr entLineColor (3)));
if n ar gout > 0
v ar ar gout {1} = fig ;
en d
% ---------------------- test .m (초기화 Routin e ) ---------------------------
[그림 1- 51]과 같이 M enubar를 figur e로 잡은 뒤에, 만일, m atlab이 제공하는 임의의 m enu
it em 을 지우고 싶다면, 다음과 같이 하면 된다.
- 59 -
1. Uicontrol Object의 GUI요소 사용 방법
han dles =
figur e1: 1
pu shbutt on 1: 247.0013
BSlidValT x t : 246.0013
GSlidV alT xt : 245.0013
RSlidValT x t : 219.0015
text 11: 218.0015
중간 생략
ax e s 1: 199.0015
figM enuT ools : 154.0018
figM enuIn s ert : 142.0018
figM enuView : 139.0018
figM enuE dit : 127.0020
figM enuT oolsBF DS : [179.0017 178.0017]
figM enuCam er aPA x : 169.0018
중간 생략
중간 생략
m atlab이 기본적으로 제공하는 m enubar가 첨가된 test .m함수는 [그림 1- 52]와 같다.
7 편에서 계속 ...
(이어지는 내용 ☞ In sert m enu 중에서 XLabel m enu는 삭제하고, YLabel m enu의 label을
Y_Label로 바꾸어 보자.)
- 60 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법
이제, [그림 1- 52]의 In s ert m enu 중에서 XLabel m enu는 삭제하고, YLabel m enu의 label을
Y_Label로 바꾸어 보자.
우선, XLabel m enu를 삭제하기 위해서는 GUI com pon ent의 모습의 유・무를 결정하는
v i s ible propertynam e을 사용하면 된다.
즉, 다음과 같이 명령하여 보자.
그러나, F ile m enu에 있는 Pr efer en ces ..., P rint S etup ... m enu의 경우에는 해당 handle v alu e
가 주어지지 않았으므로 contr ol할 수 없다.
- 61 -
1. Uicontrol Object의 GUI요소 사용 방법
- 62 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법
[그림 1- 55 ] 첫 번째 me nu 설정방법.
[그림 1- 55]에서 설정한 Option s m enu는 F igur e Object에 나타나는 최상위 m enu이다.
즉, F igure object에 있는 F ile, E dit , View , In sert , ...과 동등한 계층의 m enu가 된다.
- 63 -
1. Uicontrol Object의 GUI요소 사용 방법
그러므로, 이제, Option s m enu에 [그림 1- 56]과 같이 SubM enu를 만들어 보자.
[그림 1- 56]에서 Diam on &d는 앞에서도 설명하였듯이, Diam ond와 같이 d밑에 밑줄을 그은
것을 의미한다.
우선, Option s m enu에 서브 m enu로 Grid Style m enu를 만들어 보자.
Option s m enu의 서브 m enu를 만들기 위해서는 우선, Option s m enu를 m ou s e로 click하여
선택하고, [그림 1- 55]에 보여 준 N e w M e n u It e m icon을 click한다.
그리고, Label에 Grid Style이라고 지정한다.
결국, 임의의 m enu에 대한 서브 m enu를 만들기 위해서는 우선, m ou s e로 서브 m enu를 만
들고자 하는 m enu를 선택하고, New M enu Item icon을 click하면 선택한 m enu의 서브
m enu를 만들어 나간다.
이제, 다시 한번 N ew M enu It em icon을 click하여 [그림 1- 57]과 같이 label에 Grid On을
지정하고, Callback에 grid를 on하도록 set (g ca ,'x grid ' ,' on ' ,'y grid ' ,' on ' )을 지정한다.
- 64 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법
- 65 -
1. Uicontrol Object의 GUI요소 사용 방법
- 66 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법
이라고 지정한다.
- 67 -
1. Uicontrol Object의 GUI요소 사용 방법
①번과 ②번 lin e을 주석 처리하고, 저장한 뒤에, t est .m 함수를 실행하고, Grid On m enu를
m ou s e로 click해 보기 바란다.
그러면, callback 함수를 set (g ca ,'x grid ' ,' on ' ,'y grid ' ,' on ' )으로 놓은 것과 동일하게 동작할
것이다.
①번에서 T ag GridOff는 Grid Off에서 사용하는 T ag nam e이다.
그리고, ②번 lin e에 의해서 Grid On/ Off가 배타적으로 ch eck sign이 할당되게 된다.
이제, T a gGrid Off에 대해서도 [그림 1- 58]과 같이 callback함수를 지정하고, t est .m 함수에
다음과 같이 T agGridOff 서브 함수를 첨가 해 주자.
우선, [그림 1- 59]와 같이 3개의 m enu s를 [그림 1- 56]을 참고하여 만들어 보자.
각각에 대한 Lab el 이름과 T ag 이름, 그리고 Callback함수들은 [표 1- 4]와 같다.
- 68 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법
Label 이름 T ag 이름 Callback 함수
Diam on&d DM arkRdM enu t est ( 'DM arkRd_Callback ' ,gcbo,[],guidata (g cbo))
Cir cl&e CM arkRdM enu t est ( ' CM arkRd_Callback ' ,g cbo,[],guidat a (gcb o))
8 편에서 계속 ...
(이어지는 내용 ☞ DM arkRd_Callb ack함수)
- 69 -
1. Uicon trol Object의 GUI요소 사용 방법
- 70 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
Ch eck_hn ds =[h an dles .DM arkRd h an dles .CM ark Rd h an dles .A M ark Rd];
E x Ch oice (1,Ch eck _h n d s )
①번 lin e에서는 현재, m ou se로 click한 m enu 의 T ag n am e이 DM arkRdM enu 인지를 비교하
고 있다.
만일, m ou se로 click한 m enu 의 t ag n am e이 DM arkR dM enu 이라면, Diam on d r adiobutt on 을
m ou s e로 click한 것과 같은 효과를 주기 위해서 ②번 lin e과 같이 Diam on d r adiobu tt on의
h an dle v alu e인 h an dle.DM arkR d를 사용하여 v alu e 를 1 로 settin g하고 있다.
여기서 주의할 것은 R adiob utton과 ch eckb ox , 그리고, tog g leb utton 모두 m ou se로 click하
면, 해당 v a lu e 가 1 로 s ettin g 된다는 것이다.
그리고, m ou se로 click하지 않았으면, v a lu e 가 0 으로 settin g된다.
③번 lin e과 ④번 lin e은 앞에서 이미 언급하였듯이, 3개의 m en u를 배타적으로 ch eck sign 을
부여하기 위해서 첨가한 것이다.
같은 방식으로, Cir cle r adiobu tt on 과 A st erisk r adiobu tt on의 Callb ack함수에도 codin g 한 뒤
에 저장하고, 실행하면, M ark er T y pe m en u의 서브 m en u s와 3개의 r adiobu tt on 이 재대로
연결되어 작동하는 것을 볼 수 있을 것이다.
- 71 -
1. Uicon trol Object의 GUI요소 사용 방법
[그림 1- 60 ] File me nu
- 72 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
if n ar gin == 0 % LA U N CH GUI
fig = open fig (m filen am e,'r eu se ' );
% U s e sy st em color s ch em e for fig ur e :
set (fig ,' Color ' ,g et (0,' defaultUicontr olBack gr oun dColor ' ));
% Gen er at e a stru ctur e of h an dle s to pa s s to callb ack s , an d st or e it .
h an dles = g uih an dles (fig );
중간 생략
set (h an dles .DM ark RdM enu ,' acceler at or ' ,' d ' ); ▶ ①
set (h an dles .CM arkR dM en u ,' a cceler ator ' ,' e ' ); ▶ ②
set (h an dles .A M ark RdM enu ,' acceler at or ' ,'k ' ); ▶ ③
if n ar g out > 0
v ar ar g out {1} = fig ;
en d
try
h an dles =gu idat a (g cb o );
if h an dles .ListB ox Off ==1
h an dles .ListBox Off =0;
set (h an dle s .L sitM ark F ace,' en able ' ,' on ' )
set (h an dle s .L sitM ark F aceT x t ,' en able ' ,' on ' )
gu idat a (g cb o,h an dles );
- 73 -
1. Uicon trol Object의 GUI요소 사용 방법
en d ;
[v ar ar g ou t {1:n ar g out }] = fev al(v ar ar gin {:}); % F EV A L s w it chy ard
cat ch
disp (la st err );
en d
en d
% ---------------------- test .m 초기화 Routin e ----------------------------
[그림 1- 62 ] me nu s e pa rato r.
[그림 1- 62]와 같이 S epar at or를 사용하기 위해서는 [그림 1- 63]과 같이 m enu edit or에서
S e p ara t o r a b o v e th i s it e m 을 click하면, 현재 설정하는 m en u의 위에 [그림 1- 62]와 같이
s epar at or가 만들어진다.
- 74 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
어쨌든, 이번에 학습할 u icont ex tm enu 는 [그림 1- 64]와 같이 A x es obj ect에서 m ou se의 오
른쪽 버튼을 click 하였을 때 나타나며, m ark er ty pe과 lin e sty le을 조정해 주는 역할을 수행
한다.
- 75 -
1. Uicon trol Object의 GUI요소 사용 방법
- 76 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
[그림 1- 67]은 [그림 1- 64]에서 보여준 u icon tex tm enu 의 기능을 수행하도록 구성해 본 것이
다.
Label : T ag : Callb a c k :
Diam on &d T ag DiaCon M enu t est ( 'DM arkRd_Callb ack ' ,g cb o,[],g uidata (g cb o)) off
Cir cl&e , T ag Cir Con M en u t est ( ' CM arkRd_Callb ack ' ,g cb o,[],g uidat a (g cb o)) off
A st eris &k , T ag A st Con M en u t est ( 'A M arkRd_Callb ack ' ,g cb o,[],g uidata (g cb o)) off
Da sh ed Lin e T ag DCon M en u t est ( 'DhLin eChk _Callb ack ' ,g cb o,[],gu idat a (g cb o )) on
Dott ed Lin e T ag Dt Con M enu t est ( 'DtLin eCh k_Callb ack ' ,g cb o,[],g uidata (g cb o)) off
Da sh - D ot
T ag DDConM en u t est ( 'DDLin eChk_Callb a ck ' ,g cb o,[],gu idat a (g cb o )) off
Lin e
Default , T ag Defau ltM enu t est ( 'T ag Play Butt on _Callb ack ' ,g cb o,[],g uidat a (g cb o)) on
- 77 -
1. Uicon trol Object의 GUI요소 사용 방법
- 78 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
어쨌든, Ex Ch oice_m enu .m 함수를 사용하여 u icont ex tm en u에 배타적 선택의 기능을 부여하
기 위해서는 다음과 같이 codin g해 주면 된다.
m en u_item _h n d s =[h an dles .DM arkR dM en u h an dle s .CM arkRdM en u h an dles .A M arkR dM en u ];
E x Ch oice_m enu (1, m enu _it em _h n d s );
Ch eck_hn ds =[h an dles .DM arkRd h an dles .CM ark Rd h an dles .A M ark Rd];
E x Ch oice (1,Ch eck _h n d s )
- 79 -
1. Uicon trol Object의 GUI요소 사용 방법
Ch eck_hn ds =[h an dles .DhLin eChk h an dle s .DtLin eChk h an dles .DDLin eChk ];
E x Ch oice (1,Ch eck _h n d s )
s et (h an dles .Lin e_h an dle,'Lin eSty le ' ,' - - ' )
% - - - - - - - - - - - - - - - - - - - - t est .m (Dh Lin eCh k_Callb ack ) - - - - - - - - - - - - - - - - - - - - - - - -
우선, x , y (x )에 입력한 값들에 근거하여 plot .m 함수를 사용하여 plottin g하도록 play butt on
의 callb a ck함수를 codin g 해 보자.
g uide.m 함수의 Pr operty In spect or를 사용하여 P lay bu tt on의 Callb ack함수 pr ot oty pe을
t est .m 함수에 추가해 준다.
이때, P lay bu tt on의 T ag n am e은 T a g P l ay B u t t o n 으로 설정하자.
- 80 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법
이제, Play butt on 을 click 하면, 기존에 선택한 모든 Lin e T y pes를 해지하고, default lin e
ty pe으로 바꾸어 주는 기능을 추가해 주면 code는 다음과 같이 될 것이다.
ConM en u_item _h n d s =[h an dles .T ag DiaCon M enu h an dles .T ag Cir ConM enu ...
h an dles .T agA stConM en u h an dle s .T a gDConM en u ...
h an dles .T agDt Con M en u h an dles .T ag DDCon M en u h an dles .T ag DefaultM enu ];
E x Ch oice_m enu (7, ConM enu _it em _h n d s ); ▶ ①
m en u_item _h n d s =[h an dles .DM arkR dM en u h an dle s .CM arkRdM en u h an dles .A M arkR dM en u ];
s et (m en u_it em _hn ds ,' ch eck ed ' ,' off ' ); ▶ ②
Ch eck_hn ds =[h an dles .DM arkRd h an dles .CM ark Rd h an dles .A M ark Rd];
s et (Ch eck_hn d s ,'v alu e ' ,0) ▶ ③
Ch eck_hn ds =[h an dles .DhLin eChk h an dle s .DtLin eChk h an dles .DDLin eChk ];
s et (Ch eck_hn d s ,'v alu e ' ,0) ▶ ④
% - - - - - - - - - - - - - - - - - - - t est .m (T agPlay Bu tton_Callb ack ) - - - - - - - - - - - - - - - - - - - - - -
①번 lin e은 기존에 선택한 모든 uicon tex tm enu 의 ch eck sig n을 해지하고, default m en u에
ch eck sig n을 부여하는 기능에 대한 설명이다.
- 81 -
1. Uicon trol Object의 GUI요소 사용 방법
이 것 으 로 GU I pro g ram m in g 에 대 한 설 명 을 마 친 다 .
- 82 -