본문으로 바로가기
본 강좌에 사용되는 MATLAB은 버젼 7.9.0 (R2009b)을 대상으로 합니다.

List Box !

생각보다 글이 길어져서 GUI의 각 유닛 설명을 몇개의 글로 나눠서 연재하는 중입니다. 지난번에 Push Button, Edit Text, Static Text, Slider Bar를 다루었구요. 이번에는 List Box를 이야기해보겠습니다. List Box를 지난번처럼 빈 팔레트에 한번 가져와보면

위 그림처럼 나타납니다. 간단한 예제를 위해 axes하나와 Push Button도 같이 준비해 두겠습니다. inspector window를 열어보면

String이라는 곳에 표시된 저 아이콘을 누르면

나타나는 창에 위에서처럼 입력해 둡니다. 예 저 내용이 List Box 화면에 나타나는 것이고, 또한, 사용자가 선택하면 반환되는 값이기도 합니다.

m-file 편집없이 그냥 실행하면 나타나는 화면입니다. (바꿔이야기하면 저렇게 꾸미시라는 이야기기도 하지요^^) 이제 call back 함수를 작성할 건데요. listbox나 pushbutton의 tag를 변경하지 않았으니 tag는 분명 listbox1과 pushbutton1으로 되어있을 겁니다. 그 두 tag모두 call back함수가 있을 것이구요. call back함수는 당연히 사용자로부터 입력을 받으면 실행되는 것인데, 저는 그저 pushbutton으로 실행을 시킬거니까 pushbutton1_callback 함수에 내용을 작성할 것입니다. 만약 listbox를 선택하자마자 결과가 나타나게 하고 싶다면, 위 예제에서는 pushbutton을 지우고 제가 지금 부터 설명하는 내용을 listbox1_callback 함수에 위치시키시면 됩니다. 일단, 위 예제는 listbox에 함수를 사용자가 하나 지정하고 PLOT을 누르면 근냥 그림하나 보여 주는 것입니다. Push Button에 들어갈 call back함수의 내용은

입니다. 이걸 부분부분 나눠서 설명하겠습니다.

일단 listbox에서 사용자의 선택이 무엇인지 알아내야겠지요. 방법은 위와같이 하면 됩니다. 먼저 cellstr으로 listbox 전체의 목록을 받아와서 contents에 저장했습니다. 그리고, 그 안에서 어떤 값이 선택받았는지 확인해서 temp1에 저장합니다. 아래 윗 줄에 괄호모양이 다른데요. 이건 cell array인데, 설명한적이(적어도 제 블로그에서는...) 없으니 그냥 저렇게 쓰나보다 하고 넘어가죠.

음... 제가 선정한 함수중에서 나머지는 모두 이름을 그대로 사용하면되는데 cosec와 log는 좀 문제가 있습니다. 일단 cosec는 MATLAB에서는 csc라는 이름을 가지고 있습니다. 그래서 문자열을 비교하는 strcmp라는 함수를 이용해서 조건문을 만들어 두었습니다. 사용자가 cosec를 선택하면 csc라고 생각하라구요. 또한 log(x)는 아시다시피 x에 음의 값이 들어가면 안되니... 정의역을 '0'이상으로 잡도록 해 두었습니다.

이제 이 부분인데요. 물론 if - elseif - end문을 사용해서 일일이 작성해도 되겠지만, listbox에 넣어둔 내용이 어차피 함수이름이라서 eval명령을 사용하기로 했습니다. eval에 대한 설명은 이전에[관련글] 한번 해서 넘어가도록 하겠습니다. 이제 실행하시면

이런 결과를 얻을 수 있습니다.

Pop-up Menu !

ListBox와 Pop-up Menu는 사용법이 동일합니다.

ListBox에서 다루었던 예제에서 ListBox 자리에 Pop-up Menu를 가져다 놓아보죠.

String 속성도 동일하게 잡아주구요.

pushbutton 쪽 callback함수도 동일합니다. 단, handles에서 이름이 popupmenu1로 변경되었을 뿐입니다. 

역시 실행결과입니다.^^.

MATLAB 12. GUI 기초 - ListBox, Pop-up Menu.pdf

신고