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

Check Box와 Radio Button 사용하기 !

Check Box와 Radio Button의 사용법을 정말 초(?)간단히 알아보기위해 예제를 또 한번 만들어 보죠^^

Edit 박스를 두 개 넣고, Check Box 하나와 Radio Button 하나를 위와 같이 두겠습니다. TAG는 변경안했으니, 왼쪽 Edit 박스는 edit1이 태그일거고, 오른쪽은 edit2겠죠. checkbox의 Tag는 checkbox1, radiobutton은 radionbutton1이 tag입니다.

Check Box를 누르면 눌렀다고, 안눌렀으면 안눌렀다고, 메세지가 뜨도록, Radio Button도 마찬가지로 적용되도록 할 겁니다. 그래서 디폴트로 각 Edit Box의 String을 위와 같이 잡아 주겠습니다. 

이제 check box와 radio button의 callback함수를 위에서처럼 작성합니다. 일단 두 버튼의 상태를 받아오기위해

      get(handles.checkbox1, 'Value')

      get(handles.radiobutton1, 'Value')

로 받아주면 됩니다. 만약 checkbox나 radiobutton이 눌러지면 '1'이 눌러졌다가 해제되면 '0'이 반환됩니다. 그러니 if문에 넣어서 조건문으로 사용할 수 있겠지요. 그리고, 두개의 edit text의 속성 'String'을 변경해주면 글자가 바뀝니다. 그러면

위와 같이 눌렀는지 아닌지를 알 수 있습니다.

중복선택의 허용과 금지 !

방금했던 예제를 좀 확장해보겠습니다. 그전에 Panel이라는 걸 한번 써보도록 하죠.

버튼들을 보기좋게 묶어 줄 수 있습니다.^^.  그리고 inpector window를 열어서 보면, 나오는 속성중 title속성을 바꿔주면 됩니다.

저기까지만 하고, 실행해보시면, check box나 radio button이나 모두 두 세개씩 다 클릭이 된다는 것을 알 수 있습니다. 근데, 그러고 싶지 않을 때도 있잖아요. 그래서  왼쪽의 check box들은 중복선택이 가능하도록, 오른쪽의 radio button은 중복선택이 안되고 하나만 선택되도록 바꿔보곘습니다.

그리고, edit1을 지우고

위와 같이 edit text를 세 개를 두겠습니다. 글자크기는 14, 볼드체로, 글자크기는 노란색으로 설정했습니다. 지운 edit가 tag를 edit1로 가졌었기 때문에 새로만든 edit text는 tag가 edit3, edit4, edit5를 가지게 됩니다.

이제 check box의 callback함수를 보겠습니다. checkbox는 세 개지만, 하나만 보여드리면 나머지는 충분히 바꾸실 수 있을겁니다.(^^), 누르면, BackgroundColor 속성을 빨간색으로 해제하면, 흰색으로 두는 것이죠.

이제 문제는 radio button인데요. 하나만 선택될 수 있도록 말이죠.

위 radiobutton1의 callback함수를 보겠습니다. 역시 하나만 보여드리면, 다 알아서 하실 수 있을거라는(^^)

위에서, 먼저 radiobutton1이 선택된다면 (get(handles.radiobutton1, 'Value')) 나머지 버튼들의 선택을 해제해버리는 겁니다. 그게

      set(handles.radiobutton2, 'Value', 0)

입니다. radiobutton2의 속성을 '0'으로 즉, 해제하는 것이죠. 쉽죠??^^ 그런데, 만약 radiobutton 셋 다 해제된 상황도 만들고 싶네요. 쉽습니다. 위의 조건문에서 else문 처럼 꾸며주면 됩니다. 왜냐면, 위 코드상 이미 두개 이상이 선택되는 경우는 없거든요.

이렇게 해서 최종적인 프로그램을 만들었네요. 이번에는 CheckBox와 RadioButton 그리고, 지나가면서 Panel의 간단한 사용법을 익혀보았습니다.

untitled.m

untitled.fig

MATLAB 13. GUI 기초 - CheckBox, RadioButton.pdf


댓글을 달아 주세요

  1. 2010.04.28 16:59

    비밀댓글입니다

  2. BlogIcon 핑구야 날자 2010.04.28 18:39 신고

    조금은 무슨 내용인지 이해가 갈 것 같아요,, 비스무리한 일을 하거든요,,

  3. 허준영 2010.11.26 04:30 신고

    항상 많이 배우고 가다가 처음 댓글 남깁니다~ 고맙습니다~

  4. 훈쿤 2011.01.31 16:35 신고

    보통 gui에서 구현된 m-file에서 핸들값을 받을때는 get(handles.라디오버튼, 'Value') 이런식으로 받는다면
    다른 M-file에서의 GUI의 버튼값을 받으려면 어떻게 해야하나요?

    • BlogIcon PinkWink 2011.02.05 15:32 신고

      다른 m-file에 얌전히 그냥있는 함수를 받아오실려면 라이브러리로 만들어두시거나 하셔야하지 않나요?? 그런데 저도 해보진 않은거라 답을 드리기가 그렇네요. ㅠㅠ 지정합니다.

    • Keizi Kang 2012.01.29 08:40 신고

      GUI 버튼의 callback 함수 내에, 다른 함수를 call 하는 부분을 넣고, input argument로 GUI 버튼 값을 넣으면 되지 않을까요? (질문을 정확히 이해했는지 모르겠네요.)

    • BlogIcon PinkWink 2012.01.30 08:26 신고

      다른 m-file의 경우 함수내 변수를 함수밖에서 호출할 수 없기 때문에 약간 힘들어질 것 같은데요.

  5. Keizi Kang 2012.01.29 03:14 신고

    안녕하세요. 글 잘 보았습니다. 그런데 결국 따지고 보면 checkbox와 radiobutton은 다를 것이 없어 보이는데요. 모양 외엔 차이가 없는 것인가요? 한 panel 내에 radiobutton을 넣어두면 진정한 의미의 radiobutton이 되길 바랬는데 그건 안되나 보네요...

    • BlogIcon PinkWink 2012.01.30 08:25 신고

      네.. 저도 radiobutton이 중복체크가 안되는 건줄 알았는데.. 그냥 생긴 모양을 이야기하는 것 같더라구요^^

    • mizer 2014.10.08 11:18 신고

      일반패널 대신 라디오버튼 그룹을 사용한 다음 SelectionChangeFcn 을 활용하면 버튼 바뀔때 이벤트가 발생하던데요,
      중복되는것 같지도 않고..
      혹시 진정한 의미의 라디오버튼이라는게 고런거 말씀하시는 건가요?ㅎㅎ

    • BlogIcon PinkWink 2014.10.08 11:35 신고

      맞습니다 사실 원래 라디오 버튼은 당연히 그렇죠^^.
      그런데 당시에 이 글을 적을때는 이게 실제 수업자료였는데, 다른 버튼 혹은 기능을 비활성화하는 것을 같이 보이고 싶었죠. 뭐 잘 안되고 그냥 이것저것 같다 붙인게 되었지만요.. ㅎㅎ
      오래전 글인데 댓글을 달아 주셔서 감사합니다.^^

  6. 2016.10.20 15:59

    비밀댓글입니다