2009-06-17 2 views
0

전역 변수로 노출 된 함수 핸들을 사용하여 GUI/GUIDE 파일에서 하위 함수를 호출하려고하면 새 축이 항상 설정되어 있어도 생성됩니다 축을 GUIDE Figure의 특정 축으로 이동합니다. 왜 이런 일이 일어나는 지 아는 사람이 있습니까? GUIDE 코드는 다음과 같습니다MATLAB : 외부에서 GUI/GUIDE 함수 호출

############################################################### 
function varargout = demo(varargin) 
    % Begin initialization code - DO NOT EDIT 
    gui_Singleton = 1; 
    gui_State = struct('gui_Name',  mfilename, ... 
        'gui_Singleton', gui_Singleton, ... 
        'gui_OpeningFcn', @demo_OpeningFcn, ... 
        'gui_OutputFcn', @demo_OutputFcn, ... 
        'gui_LayoutFcn', [] , ... 
        'gui_Callback', []); 
    if nargin && ischar(varargin{1}) 
     gui_State.gui_Callback = str2func(varargin{1}); 
    end 

    if nargout 
     [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); 
    else 
     gui_mainfcn(gui_State, varargin{:}); 
    end 
    % End initialization code - DO NOT EDIT 

function demo_OpeningFcn(hObject, eventdata, handles, varargin) 
    handles.output = hObject; 

    % Update handles structure 
    guidata(hObject, handles); 

    global myhandles updateFunction; 
    myhandles = handles; 
    updateFunction = @update; 

function varargout = demo_OutputFcn(hObject, eventdata, handles) 
    varargout{1} = handles.output; 

function pushbutton1_Callback(hObject, eventdata, handles) 
    update(); 

function update() 
    global myhandles; 

    axes(myhandles.axes1); 
    plot(1:2,1:2); 

########################################################################### 

을 내가 (위의 외부 파일)을 수행 할 때

global updateFunction; 
feval(updateFunction) 

나는 항상이 아닌 GUI의 그림에서 새로 만든 그림 창에서 플롯을 참조하십시오. 왜 이런 일이 일어나는 걸까요? 내가 시도 할 것

+0

업데이트 기능을 확인해야합니다. 그것은 당신을 돕는 데 오히려 중요합니다. 또한 전역 변수는 일반적으로 필요하지 않으며 종종 코드를 유지 관리하기가 어렵습니다. 코드를 다른 방식으로 구조화하는 것이 좋습니다. – MatlabDoug

답변

2

우선 다음과 같이 기능 갱신를 대체하는 것입니다 :

function update 
    global myhandles; 
    plot(myhandles.axes1,1:2,1:2); 

이 명시 적으로 주어진 축에 플롯하기 위해 PLOT 기능을 말할 것이다. 그래도 문제가 해결되지 않으면 '추가'에 (아마도 에 demo_OpeningFcn) 축 'NextPlot'속성을 설정하려고 : 당신이 가이드를 사용하여 GUI를 만들 때 기본적으로

set(myhandles.axes1,'NextPlot','add'); 
0

, matlab에는 'HandleVisibility을 설정 'GUI와 관련된 모든 객체의'콜백 '속성. 즉,이 핸들을 콜백 루틴 외부 (즉, 명령 행 또는 외부 함수에서)의 현재 그림 또는 현재 축으로 설정할 수 없습니다.

이 문제를 해결하려면 모든 플로팅 함수에서 명시 적으로 적절한 핸들을 지정하거나 축의 'HandleVisibility'속성을 'on'으로 설정할 수 있습니다. 이 작업은 속성 관리자를 통해 개체 기준으로 수행하거나 'Tools -> GUI Options ...'로 이동하여 'Command-line Accessibility :'를 'on'으로 변경하여 전체 GUI에서 수행 할 수 있습니다.