2017-03-28 1 views
0

나는 간단한 MATLAB GUI 코드를 가지고 있습니다. 버튼을 누르면 기능이 실행됩니다. 내가 두 번이 버튼을 누를 때MATLAB GUI - 버튼 반환 오류

그러나, 그것은 오류를 유형 '구조체'의 입력 인수에 대한

정의되지 않은 함수 'GUI'를 던지고있다. @에

오류 (hObject, EVENTDATA) GUI ('pushbutton1_Callback', hObject, EVENTDATA, guidata (hObject))

오류 콜백 uicontrol 평가하는 동안

% --- Executes on button press in pushbutton1. 
function pushbutton1_Callback(hObject, eventdata, handles) 
% hObject handle to pushbutton1 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
set(handles.pushbutton1, 'enable','off'); 
output = randomFunction(); 
    a = 1 

while(1) 
    a = a+1 
    if a == 4 
     break; 
    end 

end 
set(handles.pushbutton1, 'enable','on'); 
+0

합니까을 경우에도 randomFunction 오류를 변경하도록이 작업을 수행 onCleanup를 사용하는 것이 좋습니다? – Suever

+0

좋은 전화입니다.하지만 앞으로는 독립 실행 형 GUI로 만들 계획입니다. 어떻게 그 길에서 일하게 될까요? 그 무작위 기능. 이미지에서 작동하기 때문에 실제로 사용자에게 디렉토리를 선택하도록 요청합니다. –

답변

1

문제는 randomFunction입니다 현재 작업 디렉토리를 변경하거나 PATH을 수정하여 GUI 기능 (GUI.m)이 더 이상 경로에 없으며 두 번째 버튼을 클릭 할 때 찾을 수 있어야합니다. 이 동작을 중지하려는 경우

은 두 가지 옵션이

  1. 옵션 randomFunction하지에 메이크업이 수정 사항을 수정하는 것입니다 선호 하였다. 함수는 항상 사용자 환경이 호출되기 전의 상태로 유지되어야합니다. cd를 사용하지 않을 것입니다하지만 당신은 쉽게 randomFunctionrandomFunction

    function randomFunction() 
        folder = pwd; 
        cleanup = onCleanup(@()cd(folder)); 
    
        % Normal contents of randomFunction 
    end 
    

    다른 옵션 내에서 onCleanup을 사용하여이 작업을 수행 할 수 있습니다. 이것이 최선의 방법입니다. 당신은 당신이 randomFunction을 수정할 수없는 경우 함수를 호출하기 전에 현재 디렉토리가 무엇인지 기억 콜백을 수정할 수있는 파일

    filename = fullfile(folder, 'image.png'); 
    imread(filename) 
    
  2. 에 액세스하는 대신에 전체 파일 경로를 사용하고 randomFunction 완료 후 다시 변경할 수 있습니다. 사실 디렉토리가 현재 작업 디렉토리를 변경 randomFunction``다시

    function pushbutton1_Callback(hObject, eventdata, handles) 
        set(handles.pushbutton1, 'enable', 'off'); 
    
        % Make sure that when this function ends we change back to the current folder 
        folder = pwd; 
        cleanup = onCleanup(@()cd(folder)); 
    
        output = randomFunction(); 
        a = 1 
    
        while(1) 
         a = a+1 
         if a == 4 
          break; 
         end 
    
        end 
        set(handles.pushbutton1, 'enable','on'); 
    
+0

random 함수는 이미지 집합과 이미지 처리를 수행하는 폴더를 선택합니다. 이 폴더를 선택하면이 폴더의 matlab 함수도 읽습니다. 이 GUI를 독립형으로 만들려면 어떻게해야합니까? –

+0

@JeshKundem 전체 파일 경로를 사용하는 방법에 대한 내 업데이트를 참조하십시오. – Suever