본문 바로가기
매트랩(Matlab)/매트랩 gui

[Matlab gui / 매트랩 GUI] 4. edit text 응용 프로그래밍 - global 변수 사용하기

by freezkim 2010. 5. 28.
매트랩 gui 강의 4번째- edit text 응용 프로그래밍(global 변수 사용하기)

오랜만에 올라오는 강의 연재네요. 이젠 기말도 끝나고, 한껏 여유로운 방학........따윈 개뿔 실험실에 알박고 있습니다.
성적은 이미 저 먼 안드로메다로......우울하군요.

이 우울함을 매트랩 강의로 승화시켜버리겠다는 생각을 하고 있습니다ㅠ.ㅠ?

이번엔 저번에 이어 edit text와 push 버튼을 연동시켜서 프로그래밍을 한번 해볼까 하는데요.
특히 global변수라는걸 소개시키기 위해 다소 억지스럽게 코딩을 해봤어요.

global변수가 뭔지 어떤지 저떤지는 일단 프로그래밍을 하면서 보도록합시다ㅋ

어떤걸 만들꺼냐면요. 화살표를 두개 넣고 숫자가 1, 2, 3, 4 이런식으로 증가하고 감소하는 고런걸 한번 만들어 볼까해요.(이게 뭔솔임?)


이런식으로 버튼을 만들어서 3번을 누르면 숫자가 증가하고, 1번을 누르면 숫자가 작아지도록 하는 버튼을 만들어봐요.

1) 먼저 다음과 같은 형태로 버튼을 배치합니다.


2) 고담에 보기좋도록 글자크기도 늘리고, 버튼도 화살표로 바꿔보자구요. 제일 왼쪽 버튼을 오른쪽 마우스로 클릭한후에, property inspector에서 Fontsize와 String을 다음과 같이 바꿔줍니다.

밑으로 가는 화살표는 ㅁ -> 한자 -> 3번째 페이지에서 1번째 문자(▼) 이렇게 입력했어요.


3) 나머지 두개도 다음과 같은 형식으로 바꿔줍니다. 그리고 나중에 프로그래밍 하기 쉽게, Tag에 이름을 살포시 바꾸도록 해보아요.



4) 저는 다음과 같은 순서대로 Tag의 이름을 바꿨습니다. Tag의 역할을 잘 모르겠다면 gui 2강의 Tip부분을 참조해 주세요.
 ① downbutton
 ② variable
 ③ upbutton



자 일단 이렇게 버튼 구성이 끝났습니다. 저장할 때 이름은 guiex4로 저장했어요.

 

 

5) 이젠 미칠듯한 코딩을 해야겠죠ㅠ 다행이 버튼이 두개밖에 없으니 쉽게 쉽게 할 수 있을겁니다.


자자 먼저 OpeningFcn 부분을 살짝 건드려 봅시다. 요번엔 뭔가 특별히 global이란걸 처음 써봤는데요.
요 global이란건 변수를 "공유"시킬 때 사용합니다. (고급스럽게 "전역변수"라고 불러줍니다.)

예를들어, 로보트 태권 v와 마징가 z가 둘다 김박사가 개발한 "전자동 48구경 로켓미사일"을 장착한다고 합시다.
이때, "전자동 48구경 로켓미사일"을 global로 지정해준다면 태권v가 쓰고 남은 "로켓미사일"을 마징가 z도 쓰도록 하는....새로 두개 만드는게 아니라 쓰던거 또 쓰게 하는......이런 공유의 개념이랄까요.....아 뭔가 말이 더 어려워 ㅠㅠㅋ

자 뭐 어찌됐건(....) ptnum이라는 변수는 이제부터 공유시키기로 결정했습니다.
ptnum은 저번 3강에서 사용했던 get(handles.variable,'String')명령어를 이용해 edit text에서 불러온 문자가 저장되겠고요.

요걸 숫자로 바꿔서 사용할 것이므로 str2num이란 명령어를 이용해서 char타입을 숫자타입으로 변환해 줍니다.

즉, ptnum은 '1' 이란 문자에서 1이란 숫자로 바뀌게 됩니다.



그다음 downbutton을 구현할텐데요.


먼저 global ptnum이라고 입력해서 opening function에서 사용했던 ptnum을 같이 쓴다고 해줍시다.

이때 ptnum에는 1이란 숫자가 들어있을 거구요. 1씩 감소시킬려면??
ptnum=ptnum-1; 로 지정해버리면 downbutton을 누를때마다 ptnum이 1씩 줄어들겠죠.
그후 sprintf를 이용해서 char타입으로 바꾼 다음
set(handles.variable,'String',dp);
요렇게 edit text에 입력을 해줍니다.


마찬가지로 하나씩 증가시키는 부분에도 global ptnum이라고 입력해서, 공유해주신 다음에
ptnum=ptnum+1; 요렇게 지정했습니다. 나머지는 동일합니다.

그후엔 직접 실행하신 후! 잘 돌아가나 확인해보세요ㅋㅋ