본문 바로가기

MATLAB/ㄴ 앱 디자이너

다중 창 앱에서 데이터 공유하기

https://kr.mathworks.com/help/matlab/creating_guis/multiwindow-app-gui-in-app-designer.html

 

다중 창 앱에서 데이터 공유하기 - MATLAB & Simulink - MathWorks 한국

이 예제의 수정된 버전이 있습니다. 사용자가 편집한 내용을 반영하여 이 예제를 여시겠습니까?

kr.mathworks.com

 

이 예제에서는 2개의 앱 간에 데이터를 전달하는 방법을 보여줍니다. 

이 다중 창 앱은 입력 인수를 사용하여 대화 상자 앱을 호출하는 메인 앱으로 구성됩니다. 

대화 상자는 메인 앱의 특성을 수정하는 데 사용할 수 있는 여러 옵션을 표시합니다.

사용자가 대화 상자를 닫으면 해당 선택 항목이 메인 앱으로 전송됩니다.

이 예제에서는 다음과 같은 앱 작성 작업을 수행하는 방법을 보여줍니다.

1. 입력 인수를 사용하여 앱 호출
2. 앱 객체인 반환 인수를 사용하여 앱 호출
3. 앱에서 퍼블릭 함수를 호출하여 앱에 값 전달
4. 각 앱이 닫힐 때 유지 관리 작업을 수행할 CloseRequestFcn 콜백 작성

 

 

 

DialogAppExample.mlapp

 

 

MainAppExample.mlapp

 

MainAppExample의 Options를 클릭하면 DialogAppExample가 팝업

→ DialogAppExample의 조정에 따라 MainAppExample가 변화하는 구조

 


 

1. MainAppExample

 


    properties (Access = private)

        DialogApp                   % 대화상자 app
        CurrentSize = 35;           % 샘플의 크기
        CurrentColormap = "Parula"; % 컬러맵

    end




    methods (Access = public)
    
        function updateplot(app, sz, c)

            % properties와 동일하게 입력값 저장
            app. CurrentSize  = sz;
            app. CurrentColormap  = c;
            
            % plot의 업데이트
            Z = peaks(sz);
            surf(app.UIAxes,Z);
            colormap(app.UIAxes,c);
            
            % Plot Options 버튼을 다시 활성화
            app.OptionsButton.Enable = "on";

        end
        
    end

 

콜백 함수

 

구성 요소 생성 후 실행


function startupFcn(app)

    % 초기 플롯을 표시하려면 updateplot을 호출
    updateplot(app, app.CurrentSize , app.CurrentColormap  )

end

 

Options 버튼 클릭 시 실행


function OptionsButtonPushed(app, event)

    % 대화 상자가 열려 있는 동안 Plot Options 버튼을 비활성화
    app.OptionsButton.Enable = "off";

    % 샘플 크기와 컬러맵을 가져옴
    szvalue = app.CurrentSize;
    cvalue = app.CurrentColormap;

    % 옵션 대화 상자를 열고 입력 값을 전달함
    app.DialogApp = DialogAppExample(app, szvalue, cvalue);

end


 

닫기 


function MainAppCloseRequest(app, event)

    %  Main App을 닫기하면 두 App 모두 닫힘
    delete(app.DialogApp)
    delete(app)

end



 

 


 

 

 

2. DialogAppExample

 



    properties (Access = private) 
 
        CallingApp

    end

 

콜백 함수

 

구성 요소 생성 후 실행


        function StartupFcn(app, caller, sz, c)

            % CloseRequestFcn에서 사용하기 위해 주요 앱을 properties에 저장
            app.CallingApp = caller;
            
            % 입력값에 따른 UI 업데이트
            app.EditField.Value = sz;   % EditField : Sample Size의 값
            app.DropDown.Value = c;  % DropDown : Colormap의 값

        end

 

OK 버튼 클릭 후 실행


       
        function ButtonPushed(app, event)

            % 주요 앱의 공개 함수 호출
            updateplot(app.CallingApp  , app.EditField.Value, app.DropDown.Value);
            
            % 대화상자 삭제
            delete(app)

        end

 

닫기 


function DialogAppCloseRequest(app, event)

    % 주요 앱이 여전히 열려 있다면 주요 앱에서 Plot Options 버튼을 활성화.
    if isvalid(app.CallingApp  )
        app.CallingApp  .OptionsButton.Enable = "on";
    end
    
    % 대화 상자 닫힘
    delete(app)

end