2014-05-23 1 views
1

이미지를 처리하고 보는 GUI 프로그램을 만들었습니다. 나는 좀더 간결하게 만들기 위해 GUI 함수 콜백 내에서 호출되는 헬퍼 함수에서 두 번 이상 사용되는 코드 중 일부를 작성했습니다.GUIDE로 만든 Matlab GUI의 도우미 함수에서 핸들에 데이터 저장/검색

그러나이 방법으로 프로그램을 작성하면 구조를 변경하기 위해 변경 사항을 저장하는 데 어려움이 있습니다. 도우미 함수의 계산은 디버깅 모드에서 검사했을 때 올바르게 수행되었습니다. 그러나 핸들 구조에 대한 변경 사항은 업데이트되지 않았습니다.

어떻게 해결할 수 있는지 궁금합니다.

코드 :

function ProcessData_Callback(hObject, eventdata, handles) % GUI callback 
    val = get(handles.menu, 'Value'); 
    str = get(handles.menu, 'String'); 
    switch str{val} 
    case 'Mode1' 
     FRETCalculator1(handles); 
    case 'Mode2' 
     FRETCalculator2(handles); 
    end 

function FRETCalculator1(handles) % Helper function 
    for indT = 1:size(handles.Data,1) 
    for indZ = 1:size(handles.Data,3) 
     handles.Data{indT,3,indZ} = handles.Data{indT,1,indZ}./(handles.Data{indT,2,indZ}+1); 
    end 
    end 
    guidata(handles.mainGUI, handles); 

답변

1

실제로 변경 저장해야합니다 당신의이 선 : 지금 당신은 당신이, 함수를 호출 한 후 수정 된 핸들을 사용하려는 경우

guidata(handles.mainGUI, handles); 

을 그들을 실현하기 위해서 :

FRETCalculator1(handles); 
handles=guidata(handles.mainGUI); 
% ...code using modified handles 

실제로 핸들은 그림에서 수정되지만 함수 호출 후에 실행되는 코드에서는 수정되지 않습니다.

분명히 희망합니다. :)

+1

예. 이것은 실제로 내 문제를 해결했습니다! 정말 고맙습니다! 당신은 제가 몇 가지 개념을 명확히하도록 도왔습니다. 핸들의 두 개의 다른 복사본이 있고 어떻게 든 충돌이 있기 때문에 함수 호출이 끝난 후 핸들에 변경된 내용이 영원히 없어 졌다고 계속 생각했습니다. 나는 약간 다른 해결책을 직접 습득했습니다. 헬퍼 함수를 ​​출력으로 처리하도록 헬퍼 함수를 ​​다시 작성합니다. 그런 다음 콜백에서 : handles = FRETCaltulator1 (handles); – user3667217