본문으로 바로가기

[MATLAB 연재] 12. GUI 시작하기

category Software/MATLAB 2010.04.21 04:49
본 강좌에 사용되는 MATLAB은 버젼 7.9.0 (R2009b)을 대상으로 합니다.

MATLAB의 GUI 시작하기 !

MATLAB에서도 GUI 환경을 구축할 수 있습니다. 여기서 구차하게 GUI란 무엇인가?? 라는 말은 좀 그러니까 그건 위키디피아에 넘겨두고 [관련글], MATLAB에서 GUI를 어떻게 다루는지에 대해 이야기 해보겠습니다. 

위에 표시된 아이콘을 누르든지, 혹은 command window에서 guide라고 입력하면

이런 창이 하나 뜹니다. Blank GUI를 선택하고 OK버튼을 누르면

위의 창이 뜹니다. 음... 왼쪽에 표시된 아이콘들이 어떻게 되는지 잘 모르니까, 설정을 좀 만지죠. 위 창의 메뉴에서 File을 선택하고, preference를 선택하면

위의 화면이 나오는데요. 여기서 표시된 부분 이름을 보여라??는 부분을 체크하시고 나면

이렇게 각 아이콘들의 이름이 나옵니다. 많은 설명을 하기 전에 빈 공간을 팔레트라고 하는데요. 크기를 조절한 방법은

위에 표시된 부분을 마우스로 클릭하고 옮겨보시면 크기를 조절할 수 있습니다.

위치 간격 조절하기 !

Push Button을 하나 가져다 놓고 CTRL+C, V로 위와 같이 아무렇게나 배치를 해보죠. 다시 Push Button을 가져와도 되지만, 그러면 초반에 일정크기로 만들어지지 않아서 말이죠.^^ 우리는 처음이니까 복잡하지 않게 간단히 접근해보죠^^ 그리고, 위에서 처럼 외쪽 세개를 선택하시고

위에 표시된 Align 어쩌고 하는 아이콘을 눌러줍니다. (혹은 마우스 오른쪽 버튼으로 선택하셔도 되구요)

그러면 위와 같은 창이 뜹니다. 사실 뭐 그림만으로도 알 수 있는데요. 그래도 처음이니까...^^ 위와같이 Vertical은 off로 두고 Horizontal만 OFF 옆에 있는걸로 선택해 주면

이렇게 정렬이 잘 됩니다.

그리고 Vertial에서 일정간격 (off 밑에)을 유지하도록 하면 위 그림처럼 되죠. 

간단한 예제 학습하기 - Push Button, Edit Text, Static Text, Axes!

방금 위에서 작업하셨던 창을 닫고 다시 GUIDE 명령으로 새창을 띄우세요.

그리고 위의 그림처럼 마우스로 가져다가 놓아 보죠. 크기나 이런건 크게 신경쓰시지 않아도 됩니다. 하다보면, 다음에 할땐, 좀 신경쓰는게 보기 좋구나.. 하고 스스로 알게 됩니다.^^ 

- Static Text

Static Text를 가져다 팔레트에 놓으셨자나요..?? 그걸 더블 클릭하거나, 혹은 마우스 오른쪽 버튼에서 Inspector를 선택하거나, 혹은 클릭을 한번만하고 도구모음에서 Inspector를 선택하면 위와 같은 창이 뜹니다. 그 중 위에 표시된 String이라고 되어 있는 부분을 수정하시면, 화면 상에 보이는 글자라 바뀝니다. Static Text는 프로그램 구동상에서는 아무 역활을 하지 않는 고정된 글자열입니다. 위에 표시된 부분을 아래에 처럼 수정하세요.

제가 Static Text를 두개 가져다 놓았는데요. 그리고 위에 나타난 부분을 수정하시면, 폰트 변경이나 글자크기 조절, Bold, 색깔 등등을 수정하실 수 있습니다. 앗.. 하나 더 음... 본래 만드신것에서 모두 선택 CTRL+A을 하셔서 좀 아래로 내리서고 아래처럼 제일 위에 Static Text를 하나 더 두죠. (아무래도 제목이 있어야할 듯 해서요^^)

이제 Static Text 3개를 위와 같이 한번 수정해 보세요^^ 그리고 나면 이제 저장을 한 번 해보죠. GUI가 뭔지 이때쯤 한번 실행도 해볼겸 말이죠

저장 버튼을 누르면 이름을 지정하도록 하는데요. testGUI라고 입력하고 나면

갑자기 어떤 코드가 잔뜩 들어가 있는 m-file 에디터가 나타납니다. 뭐 놀라실건 없습니다. 그냥 놔두고

실행 버튼도 한번 눌러보죠

이렇게 되네요^^ 아직... 아무 기능도 없습니다.^^

- Edit Text

이제 Edit Text를 좀 건드려야겠네요. 그전에 제가 할려는 예제가 무엇인지 아시겠죠?? 바로, sin(2*pi*F1)+sin(2*pi*F2)를 그릴려고 하는 것입니다. 그 중 F1과 F2는 사용자에게 입력을 받게끔 하는거죠. 그래서 Static Text로 F1, F2는 여기서 입력이라고 말해 준 것이구요. 실제 사용자는 

Edit Text에 입력하도록 하는 것이죠. 예... Edit Text는 사용자에게 변수를 입력받도록 하는 역활을 합니다. 그러면 어떻게?? 위의 Edit Text 중 왼쪽걸 더블클릭해보면

이렇게 Inspector가 뜬다고 했죠??^^ 거기서 StringTag가 보이실 겁니다. String을 바꾸시면, 화면상에 나타나는 Edit Text라는 글자가 바뀝니다. Tag는 그 값을 저장하는 변수의 이름이라고 생각하시면 됩니다. - 누차 말씀드리지만, GUI환경에서 세세한 부분은 직접 책과 Help 문서를 이용하시는게 더욱 좋습니다. 전 그저 빠르고 쉽게 처음 접근하는 분들께 도움을 드릴려고 하는 것이니까요...- 그래서 저 부분을

이렇게 바꿔줍니다. Tag를 F1이라고 둔건 제가 현재 할려는 예제를 보니 아시겠지만, 왜 String을 1이라고 두는가하면, 초기값이라고 생각하시면 됩니다. ^^

그리고, 그 옆의 Edit를 여셔서 위와 같이 수정하시면 됩니다. 

- Push Button

이제 사용자에게 입력받는 부분이 끝났네요. 그리고 Push Button을 누르면 그리도록 해야겠네요. Push Button을 더블클릭하셔서 Inspector 창을 여시고

string은 PLOT으로 변경하시고, Tag는 뭐.. 그냥 놔두죠...^^ 우린 Push Button이 하나 뿐이니까요... 그리고, Push Button을 선택하고 마우스 오른쪽을 눌러 Edit m-file을 선택하시든 혹은 저장할 때 같이 떴던 m-file 에디터를 보시면 function pushbutton1_Callback 이라는 구문이 있습니다. 그 곳에 아래 코드를 입력하시면 됩니다.

코드를 설명해 보겠습니다. 먼저, 사용자에게, F1, F2를 받아와야되자나요.. 사용자가 입력했든, 혹은 제가 입력해둔 초기값을 사용하든지 간에 Edit Text에 있는 수치를 받아야합니다. 그것이

get(handles.F1, 'String')

입니다. GUI 내에서 어떤 도구-Edit Text든, 뭐든-를 건드릴려면 handles이라는 객체를 거쳐야(?)하는 데요. 그냥 저렇게 쓰자고 일단 생각하세요^^ 그래서 그곳(F1, F2)에 있는 숫자를 가져와야합니다. 문제는 걔네들이 문자라는 것이지요. 그래서 str2double 이라는 명령으로 문자를 숫자(double 형의)로 변경하는 것입니다. 그러면, f1, f2를 받는 부분은 아셨을테고.... 그림을 그리기 위해 그 아래 부분을 시간범위를 잡고, y를 도출하도록 하였지요. 마지막이 남았네요. 그려야죠...^^ GUI 에디트창에서 axes를 가져다 놨자나요. 그걸 더블클릭해서 tag를 확인해보면 axes1입니다. 그래서

plot(handles.axes1, t, y)

라고 명령을 주어서 axes1에다가 plot하라고 명령을 주는 것입니다. 

저장하고 실행해서 적절한 값을 넣고, PLOT이라고 이름붙은 Push Button을 누르면 그림이 나타납니다.

testGUI.fig

testGUI.m

MATLAB 10. GUI 기초.pdf


댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 매틀랩초보 2011.02.11 17:02 신고

    gui 관련해서 질문이 있는데요.
    push 버튼을 두개 만들려고 합니다.
    하나는 실행 버튼이고 다른 하나는 계산하는 과정에서 강제종료하는 버튼인데요.
    실행버튼은 되는데 강제종료버튼은 먹히질 않네요.
    ctrl+c말고 계산과정을 강제종료하는 버튼 m파일 명령어 혹시 알수 있을까요?

    • BlogIcon PinkWink 2011.02.12 09:42 신고

      현재제가 몸이 아파서 입원치료중이라 MATLAB을 기동시켜볼수가 없는데요...ㅠㅠ 제 기억엔 그와같은 기능이 있었습니다. 관련 영어로 계속 검색을 해보셔야겠어요... 도움이 되지 못해 죄송합니다...ㅠㅠ

  3. 완전초보 2011.05.10 01:37 신고

    안녕하세요 매틀렙을 공부하고 있는 학생입니다. PinkWink님의 강좌를
    유심있게 지켜보고 따라가고 있는데 맘 같지는 않네요 ㅠ ㅋㅋㅋ

    질문이 있는데 GUI 에서도 애니메이션처럼 그림을 이동시키는게 가능한건가요? 아무리 짜봐도 잘 안되네요 ㅠㅠ

    • BlogIcon PinkWink 2011.05.10 08:07 신고

      네.. 가능했던걸로 기억납니다. 별다른 건 안했던것 같구요..
      제 연재중에 애니메이션 구현하기..에 나와있듯이 구현했던것 같아요

  4. 공신 2011.05.12 16:15 신고

    안녕하세요. 또 오게 되었습니다. 작년에는 공업수학때문에 왔었는데, 이번엔 매트랩GUI가 또 발목을 잡네요 ㅠㅠ 글 중에 보면 자세한 내용은 책을 참고하라고 하셨는데 GUI에 관한 좋은책 한권만 추천해 주시면 안될까요? 도서관의 매트랩이란 책들은 거의 다 보고있는데 GUI는 좀 부족한 책들이 많네요. 강의 잘보았습니다.

    • BlogIcon PinkWink 2011.05.12 18:29 신고

      사실.. 포스팅 본문에는 책과 help문서를 참조하라고 했지만... 그냥 help문서만 참조하셔도 충분합니다. 저도 여러권의 GUI관련 책을 보았지만, 딱 하나의 책만 참조한 것은 아니었습니다. 바꿔말하면 이 책만 있으면 된다.. 싶은 것이 없었습니다.
      (오해하실까바 첨언하면, 기초적인 부분은 다들 잘 다루기 때문입니다.)

  5. skysb 2011.06.08 21:19 신고

    님아 대박 고마워요 다른거 매트랩으로 설계 하고있는데
    str2double 문자를 숫자로 변형하는거 몰랐는데
    이거 알아서 모든게 다 풀렸어요!!! 님짱 ㄳ!!

  6. blast 2011.06.09 11:30 신고

    음.. 모르는 것이 있어요.. 혹시 어디에 글을 남겨야 할지 몰라서 일단 이곳에 남깁니다.. gui상에서 선을 그릴수 있나요? 예를 들어 text박스 2개를 구분할때 가운데에 선을 하나 그려서 구분하고 싶은데.. Panel을 활용해도 되겠지만 이것보다는 간략하세 선하나로 하고 싶은데... 방법이 있나요?

    • BlogIcon PinkWink 2011.06.10 07:50 신고

      예전에 누군가 선을 그어서 예쁜 모양의 GUI화면을 만든 것을 보았는데, 잠시 찾아보니 잘 안보이네요. 현재 제가 자세히 찾아볼 시간적 여유가 없어서요.

  7. blast 2011.06.27 15:26 신고

    애구... 다치신것을 지금 봤네요.,...
    언릉 쾌차하세요~

  8. 회사원 2011.11.10 14:33 신고

    감사합니다... 짱

  9. 맬랩어려워요.. 2011.12.21 14:19 신고

    안녕하세요ㅎ 학교에서 프로젝트를 하나 해야 해서.. matlab GUI기능을 이용해서 해보려고 하는데..
    가장 기본적인 명령어가 뭔지 몰라서 하나 여줘보고 싶어서요 ㅎ
    위에서 설명하신 것처럼 axes창, pushbotton 등을 잘 맞춰놓고 저장한 후에.. 나중에 뭔가 추가 하고 싶을 때에는
    무슨 명령어를 써서 편집하는 창을 다시 띄우나요?? 답변 부탁드리겠습니당 ㅎ

    • BlogIcon PinkWink 2011.12.21 15:36 신고

      저장하신 이름의 m-file을 열면 코드의 수정이 가능하고
      그리고, GUI편집은 flg화일을 여시면 됩니다.
      실행은 m-file을 실행하셔야하구요.

  10. 맬랩어려워요.. 2011.12.21 17:18 신고

    저는.. fig 파일을 열면.. 그냥 실행이 됩니다.. 만들 때 봤던 편집창이 뜨질 않네요??
    7버전을 쓰고 있는데.. ㅜㅜ

  11. 맬랩어려워요.. 2011.12.21 21:27 신고

    아 guide를 치고 창을 열어서 '불러오기'를 해야 열리네요 ㅎ
    답변 감사합니당 ㅎ

  12. 애플쨈 2012.11.17 14:57 신고

    감사합니다. 좋은 글 잘 읽고 가네요.

  13. 유도현 2012.11.26 15:38 신고

    혹시 질문하나만 해도 될까요?
    GUI메뉴에서 Push버튼이랑 Edit text버튼 두개를 만들었거든요???
    그럼 푸쉬버튼을누르면 에딧 텍스트에 글자가 뜨게 하려고합니다
    근데 그글자가 이미 nco=320이라고 지정을 해놨구요
    푸쉬버튼을 누르면 nco에 해당하는 숫자가 edittext에 나오게 하려면
    무슨 명령어를 써야하나요??

  14. 어렵당... 2013.11.21 12:51 신고

    이런 글을 지금에서야 보다니.... 감사합니다~
    그런데 매트랩으로 방향키 같은것도 입력 받을 수 있나요?

    • BlogIcon PinkWink 2013.11.21 13:02 신고

      네 가능하죠. 저야 당시에 필요없어서 사용은 안했습니다만, 마우스 클릭 이벤트와 같이 키보드 press에 대한 이벤트도 있습니다. matlabcentral에서 검색해보시면 아마 쉽게 나타날겁니다.
      그리고 감사합니다.^^

  15. 매틀랩 초보 2014.02.11 16:12 신고

    매틀랩 GUI를 시작한지 얼마안된 초보입니다.
    덕택에 GUI의 입문을 생각보다 쉽게하고 있습니다^^
    그런데 GUI를 하던중 질문이 있습니다. 기존에 제가 m-file로 만든 함수가 있습니다. 그 m-file을 RUN을 시키면
    원하는 그래프가 도출되는 형식입니다. 이것을 GUI에서 pressbutton을 누르면 axes창에 원하는 그래프가 출력되게 하는 프로그램을 만들려고 하고있습니다.
    이것을 가능하게 하려면 어떻게 해야할까요? 기존 m-file로 만든 함수가 너무 길어서 global을 이용해볼까 하는데 가능할까요? 가능하다면 GUI editor에 있는 여러 함수중에서 어디다가가 써야할까요? 예를 들어.. callback함수?
    너무 두서없이 질문을 했군요ㅜㅜ 답변 기다리겠습니다.

    • BlogIcon PinkWink 2014.02.12 08:52 신고

      http://pinkwink.kr/299 를 보시면 버튼을 눌렀을때 그래프가 출력되는 예를 하나 다루고 있습니다. 그 글에서 세부적 사항은 글내에서 링크를 달아 두었습니다.

  16. 안녕하세요 2014.11.24 18:29 신고

    매트랩을 시작한지 얼마안된 초보입니다.
    GUI에서 문자를 입력하고 푸쉬버튼을 누르면 입력한 문자와는 다른 문자가 나올 수 있도록 할 수 있나요?
    이렇게 하려면 어떻게 해야하는지 조언 좀 부탁드립니다ㅠㅠ

  17. 질문이 있어요! 2014.12.01 22:09 신고

    매트랩을 시작할때 따로 미리 만들어놓은 변수가 있어요
    이 변수를 가지고 GUI 상에서 변수를 입력하고 푸쉬 버튼을 누르면 그 변수의 그래프가 나오게 만들고싶은데
    푸쉬버튼 콜백함수는 조절했습니다ㅠㅠ
    그런데 edit 콜백함수를 조절할 때 미리 만들어놓은 변수를 쓰고 싶은데
    그럴려면 어떻게 해야되나요ㅠㅠ?

  18. 질문있습니다! 2014.12.02 16:23 신고

    안녕하세요항상 강의잘보고있습니다.
    위의 강의와는 상관이 없지만 질문남깁니다.ㅠㅠ
    제가 지금 스펙트로그램을 이용한 자동악보설계시스템을 구현하려고 하는데요

    L = 128; % 윈도우 길이
    h = 0.5*(1-cos(2*pi*(0:L-1)/L));
    Nov = length(h)-10;
    [X,F,T] = specgram(x,NFFT,fs,h,Nov);

    위의 식에서 h와 Nov가 나타내는 의미를 잘 모르겟어서요ㅠㅠ
    도움 부탁드려요 ㅠㅠ

  19. 공대생 2014.12.03 23:17 신고

    정말 좋은 홈페이지 같아요!! 질문이 있는데요 !
    그래프 말고 이미지파일을 띄울수 있나요??

  20. 질문있습니다! 2014.12.10 22:43 신고

    안녕하세요 스펙트로그램과 악보를 gui를 통해 표현하려고 하는데요 처음하는 거라 너무 어렵네요 ㅠㅠ
    일단 notes 값과 durs값은 입력한 후 한개의 푸시 버튼을 통해 두개의 창에 각 각 스펙트로그램과 악보를 표현하고 싶은데 어떻게 해야될지 모르겟어서요 ㅠ 도움주시면 감사하겠습니다.

    • BlogIcon PinkWink 2014.12.11 06:30 신고

      정말 어려운 질문입니다. 왜 어렵냐면... 어떻게 이 질문에 간편히 대답할까...하고 고민하게 되니까요..ㅠㅠ.
      GUI에 관련된 기초를 익히시라는 말이외에는 지금 제가 드릴 수 있는 대답이 없습니다. 아직은 제가 초간단하게 대답할 능력이 되지를 않는듯합니다.ㅠㅠ

  21. 안녕하세요 2015.03.12 21:11 신고

    pushbutton 을 눌렀을 때 radio button 부분에 체크가 되는 gui 를 만들고 싶은데 이 강의와 radio 버튼에 관한 글을 15장에서 읽어봤는데도 잘 이해가 되지 않는데 어떻게 해야할지 잘 모르겠네요. 도움주시면 감사하겠습니다.