operator01.jpg

안녕하세요 LGS입니다.
계산기 GUI 계속입니다. 강좌를 바로 시작하도록 하죠~

qsxM9OaZ3Q0SqpfK1TgN4vnVDrCa9jxv6Zh8qftyes8v9iCkQe5j5jNbXq13qcpi57AVj7U5JEKg3P2rJTcHCSdYOEt2zXxBigBWLCDjikqlO-2mv6U

GUI 1부에서는 GUIDE Layout Editor에서 계산기의 모양을 만들었습니다.
Inspector도 사용해봤구요... 아직 실행 Code가 없기때문에 버튼을 눌러도 아무 반응이 없었죠?
오늘은 실행 Code를 작성해서 세상에서 가장 완벽한 계산기를 만들어 봅시다. ㅎㅎ

실행 Code는 MATLAB m-file Editor에서 작성해요.
GUIDE Layout Editor에서 Editor 버튼(아래의 빨간 동그라미)를 누르시면 MATLAB Editor로 넘어갑니다.
Layout을 변경후(Component 추가/삭제)에는 Editor버튼을 눌러서 M-File을 Update해주셔야 합니다.

PsqUPg8g6ZPzjc99kK5Xt7lm2jx52fQSCjQIZhvsXKfKandJnvtnxDZ7QQ1QoeV6eNCMixnlstjnR9aHpK7bhmOzgIy0E37MdVjNt8jah5vIrlz2cLc

GUI를 디자인 하면 MATLAB이 알아서 기본적인 M-file Code를 자동으로 작성해줍니다.
주석(%로 처리된 녹색부분)을 빼고 보면 몇줄 안됩니다. ^^
함수들이 너무 많아 원하는 함수의 위치를 찾기 어려울땐 Show function 버튼을 활용해보세요(아래 빨간 동그라미). 
Show function 버튼을 누르시면 함수목록이 뜹니다. btn1_Callback을 선택하면btn1_Callbakc 함수로 쓩~ 이동합니다.

Gcjo6952rlKBXYFnRWkcP8dCCdEVeDWtJBKh6PA4UhVE6XGgqD8-31BWcVafS8ii3aALfuoqJoomFCRpcrCmWuYU8gsSjOVBliJ9KQ3KyrLok2dczug

btn1_Callback 함수로 이동했네요 ^^ btn1_Callback은 다른것이 아니고 
Tag가 btn1인 녀석(지금 우리의 경우 버튼 1을 말합니다)이 눌러졌을 때 자동으로 실행되는 함수입니다. 
즉 GUI 상의 1버튼을 누르면 btn1_Callback 함수가 실행된다는 거죠~ 별거 아니죠?? ㅋㅋ 
이런 콜백함수는 MATLAB이 자동으로 생성 시켜 줍니다. 
입력변수 3개(hObject, eventdata, handles)에 대한 간략한 설명도 붙어 있네요

FMaEh9J7-l6AWIU7gzt2IgpfoqtIPR66uBgKkGOyfAQBVi86fsSFFS7awdoTq_4g7GMHSZC9PSZoS34T0QXUrF6zqPHffVSx76p-Djp5bB7zHdEIW5g

자~ 이제 직접 Code를 작성해봅시다가 아니라 좀더 설명할 것이 있어요 -_-;; 냠
위의 코드에서 handles라는 입력변수가 보이세요?
바로바로바로 이 handles라는 변수가 GUI에서 핵심 뽀인트 입니다.(밑줄 쫙!!)
handles라는 변수는 GUI에 관한 모든 정보를 가지고 있는 struct형 변수 입니다.
(struct에 대해서는 MATLAB 때려잡기 09강 Data Type 2부를 참조하세요)
handles는 GUI상에 버튼이 몇 개 있고 그 버튼이 어디에 있고 버튼이 눌리면 무슨 함수가 실행되고 배경색깔은 어떻고
글자 크기는 어떻고 등등... 즉 GUI를 굴리는데 필요한 모든 정보를 담고 있는 변수가 되시겠습니다.
참고로 eventdata는 마우스나 키보드로 부터 넘어오는 값입니다요~

1vM5MrR_5mN7nNvC86gnzulvNlbrdsYaEt8FEwtAR_1UbyJ2mNkmiG8jb6TOGa6RfZY8l4UMTr0xg20ZHJoYsFgQPVnluN05FtsI5ufSVkI-PaEtCZM

각각의 Componet(우리가 그려 넣었던 버튼,에디트박스...)에 관한 정보가 struct 형태로 handles라는 변수에 저장 되어있습니다.
btn1 버튼의 경우 handles.btn1에 저장되어있구요 editAnswer(숫자 표시되는 곳)의 경우 handles.editAnswer에 저장되어 있구요 ... ...

handles.btn1
handles.btn2
   :          :
handles.editAnswer
handels.btnCal

으로 모두 저장되어 있습니다.

각각의 Component의 Property(속성) 값을 가지고 오거나 변경하려면 get과 set이라는 함수를 쓰시면 됩니다.
형식은 아래와 같구요

get(h,'PropertyName')
set(h,'PropertyName',PropertyValue)

h는 여러분이 가지고 놀 녀석의 struct 를 적어주시면 되요. 
만약 1버튼을 참조하시려면 h는 handles.btn1 이 됩니다.
속성(property) 값을 가지고 오고 싶으면 get 함수를!! 셋팅하고 싶은면 set 함수를!!
예를 들어 지금 우리가 만들고 있는 계산기 GUI의 edit box(숫자 0이라고 쓰여있는 곳 Tag가 editAnswer임)의 
글자크기(FontSize)를 알고 싶다면??
오~ 역시 똑똑하시군요! ㅋㅋ
get(handles.editAnswer,'FontSize') 라고 하시면 FontSize의 값을 가지고 오실 수 있습니다.
(어떤 속성이 있는지 아리송~ 할 때는 GUI Layout Editor에서 보고싶은 놈을 더블 클릭 하셔서 
Inspector를 띄워서 확인하시면 됩니다요)

그럼 edit box의 글자를 0에서 1로 바꾸려면??
set(handels.editAnswer,'String','1')
이해가시죠? ^^
(숫자 1이 아니라 문자 '1'인 것에 주의하세요)

그럼 btn1_Callback 함수는 어떻게 쓰면 될까요?
휴~ 글이 다시 길어졌습니다.
잠시 쉬어 가겠습니다. 아메리카노 한잔 씩들 하시구요~ o(^o^)o



자 진짜 Code는 3부에서 쿨럭 ^^;
3부에서 뵙죠~~ 룰루랄라
이상입니다.

profile