본문으로 바로가기

[MATLAB 연재] 13. GUI - Slider 사용하기

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

이번에는 슬라이드바의 사용법에 대해 간단히 이야기해보겠습니다.

지난번과 같은 방법으로 화면을 위의 그림처럼 꾸며보도록하지요.  위에 표시된 것이 먼저 그린 slider이고 수평방향으로 누워있는 애가 두번째로 그린 slider입니다.

더블클릭해서 inspector window를 보면, slider이기 때문에, 이때껏 보지 못한 파라미터가 있음을 알 수 있습니다. 바로 Max Min인데요. 바로 slider가 처음(min)일때와 끝(max)일때의 값을 지정할 수 있습니다. MATLAB의 GUI에서 slider를 지정하고, 실행하면, slider bar의 초기 위치는 '0'인 곳입니다. 그래서 화면 구성상 깔끔하게 하기 위해 min을 -1로 설정했습니다. tag는 slider1, slider2 이렇게 붙어 있을 겁니다.

그리고, 위에 보이는 slider step은 x값이 화살표모양을 눌렀을때 움직이는 간격을 이야기 하고, y값이 네모난부분(토우 라고 합니다.)을 눌렀을때 움직이는 간격입니다. 지금은 변경할 필요를 못 느껴서 일단 그대로 두겠습니다.

여기까지만 지정하면 화면이 위와 같이 되어있을 것입니다.

제 목적은 뭐 당연히 slider의 사용이지만, 이번 예제는 slider를 이용해서 plot된 그림의 x, y축의 범위를 변경하는 것입니다. 그런데, slider 쪽의 callback함수에 그리는 명령을 주면, 실행후에 아무 그림이 나타나질 않습니다. 그러다가 slider를 한번 건드리면 그제사 그림이 나타납니다. 당연히 slider의 callback함수는 slider의 값이 변경되어야만 실행되니까요. 그래서 대상 그림이 GUI 실행과 동시에 나타나길 바라는 것이죠. 그럴땐 위에 보이듯이

function <화일이름>_OpeningFcn(..)

이라는 함수에 처음 실행과 동시에 동작해야할 내용을 넣어둡니다. 뭐 제가 잡은 예제니 그냥 심심하지 않게 적당히 sin을 그린것이라 생각해주세요^^

그리고, 저장 후에 그냥 실행하면 위와 같이 나타납니다. 당연히 slider에 아무 짓도 않했으니 slider를 아무리 움직여봐야 반응은 없습니다.^^

이제, 수직방향으로 잡은 slider1의 callback함수에 위의 내용을 넣도록 하죠. 먼저 get명령으로 handles.slider1의 내용을 받아옵니다. 꼭, handles를 붙여야한다고 지난번에 이야기했습니다. 그리고, 이미 plot명령이 실행되었고, 또 axes가 여러개 있을 수 있어서 set명령으로 속성을 변경했습니다. set으로 handles.axes1의 속성을 변경하겠다는 것입니다. 그 중 y축의 범위는 ylim이라는 속성을 건드리면 되고 그 값은 위와 같이 두었습니다. (뭐 연습이니까 그냥 잡은거라고 해두죠^^)

위는 수평방향으로 누워있는 slider2에서 x축 범위를 잡기 위해서입니다. 어차피 최초로 그릴때, 시간(t)영역을 0부터 시작하도록 하였으니, 위와 같이 xlim 속성을 잡아준 것입니다. 이제 실행하면,

되는데요. slider를 만져보시면, 어떤 변화가 나타나는지 알 수 있습니다.

testGUIslider.fig

testGUIslider.m

MATLAB 11. GUI 기초 - slider 사용.pdf


댓글을 달아 주세요

  1. BlogIcon 핑구야 날자 2010.04.23 12:18 신고

    그래프를 보면 사인,코사인,탄젠트가 생각이 난다는....ㅋㅋ

  2. 맷가이 2010.09.10 11:58 신고

    안녕하세요~저는 매트랩을 혼자 독학으로 공부하고 있는 학생인데요.
    핑크님 블로그를 보고 공부하고 있습니다.
    핑크님이 올려주신 블로그 내용대로
    퀵스타트로 만들어서 짜는 GUI는 어느정도 익혔으나
    GUI를 직접 m file기입하여 하는 방법은 어려움이 많네요ㅜ_ㅡ
    그래서 도움을 요청하고자 처음으로 댓글 남깁니다.
    원하는건 uicontrol의 슬라이더 조작을 이용하여
    그래프에 즉각 값이 반영되어 y축 값의 그래프의 움직임을 보고 싶은데요(누적X).
    bar형태로 설계해놓고 x축은 라벨해놓았습니다.

    그런데 아래 코드의 MOP 값을 슬라이더 상에서 조절해도 그래프에 반영이 되지 않네요ㅜ_ㅡ 그냥 value값만 반영됩니다ㅜ_ㅡ
    왜 그런걸까요ㅜ_ㅠ while문을 써야하나요?
    기초가 없어서 몇일째 해매고 있습니다.
    초보를 위해 한 말씀만 던져주시면 감사하겠습니다.



    clc
    clear all;
    close all;

    hold on;


    %%


    MOP1 = uicontrol('style','slider','min',1,'max',10, 'value',10);
    set(MOP1,'units','normalized','position',[.16 .16 .25 .025]);
    uicontrol('style','text','string','MOP','units','normalized','position',[.08 .16 .07 .03]);
    uicontrol('style','text','string','g','units','normalized','position',[.42 .16 .10 .03]);

    MOP=get(MOP1,'value');

    VOS=100;

    S=MOP*100/VOS;


    SD=10;

    d=5;

    CV=SD/d;

    bar(1,S,'barwidth',1);
    bar(3,CV,'barwidth',1);
    colormap(summer);
    set(gca,'xlim',[0 10])
    set(gca,'XTick',[0:5])
    set(gca,'xticklabel',{' ','S',' ','CV'})
    set(figure(1),'numbertitle','off','name','Particle parameter (ver. 0.1)')
    set(gca,'position',[.08 .4 .9 .53])
    set(figure(1), 'position',[303 100 860 520])

    hold off;

    • BlogIcon PinkWink 2010.09.13 04:17 신고

      다시 그리라는 명령구문이 안보이는데요...
      그래프를 갱신해야할텐데 말이죠...^^

      물론 get명령으로 슬라이드바의 값을 받아오긴 하셨지만.
      그게 1회성으로 끝나고 말았습니다.

      그러나 창은 닫지 않았으니 슬라이드바는 계속 움직일 수는 있지요.
      또 슬라이드바가 움직이니 해당 속성의 값은 변할 수 있습니다.

      그래프를 갱신하셔야하니

      반복문(무한루프 같은)안에 넣어두시고 빠져나오는 종료버튼을 만드셔야겠습니다.

  3. js 2013.01.15 17:48 신고

    매트랩 처음공부하는데 항상 잘보고갑니다 . 감사드립니당.^^