2012-08-07 5 views
0

MATLAB GUIDE를 사용하여 GUI를 만들었습니다. GUI에서 값을 반환하려고합니다. 여기에 코드의 관련 부분 (전체 코드는 here를 찾을 수 있습니다)입니다 : 내가 찾은GUIDE의 변수 핸들이 업데이트되지 않습니다

http://s11.postimage.org/5trvp5c83/Captura_de_tela_2012_08_06_a_s_12_25_55.png

:

function varargout = test(varargin) 

% --- Outputs from this function are returned to the command line. 
function varargout = test_OutputFcn(hObject, eventdata, handles) 

    % Get default command line output from handles structure 
    varargout{1} = handles.output; 
    varargout{2} = handles.test; 


% --- Executes on button press in pushbutton1. 
function pushbutton1_Callback(hObject, eventdata, handles) 

    handles.test = 'ok'; 

    % Update handles structure 
    guidata(hObject, handles); 

그리고 내가 GUI를 실행, 나는이 오류 메시지가 즉시 MATLAB 뉴스 그룹에 similar 질문이 있지만 해결책을 찾지 못했습니다. (제안 된 것처럼 모든 guidata의 문서를 읽었습니다).

내 문제는 하나의 GUIDE 함수 내에서 "handles"구조체에 정보를 기록했기 때문에 다른 함수에서이 정보를 검색 할 수 없다는 것입니다.

triedtest_OpeningFcn 함수의 UIWAIT 호출을 해제하면 사용자가 창을 닫을 때까지 대기합니다.

% --- Executes just before test is made visible. 
function test_OpeningFcn(hObject, eventdata, handles, varargin) 

    % Choose default command line output for test 
    handles.output = hObject; 

    % Update handles structure 
    guidata(hObject, handles); 

    % UIWAIT makes test wait for user response (see UIRESUME) 
    uiwait(handles.figure1); 

버튼을 누른 다음 핸들 변수를 가져 오려고합니다. 그러나 그것은 역시 작동하지 않으며 fails과 유사한 오류 메시지가 표시됩니다.

도움이 될 것입니다. 감사합니다.

답변

0

초기화 코드에서 해당 필드를 선언해야합니다.

handles.test = []; 

나중에 다시 호출 할 수 있습니다. 당신이 아직 존재하지 않는 handles.test에 액세스하려고 출력 기능에 있도록 오류의 원인, 바로

>> [a,b] = test() 

이 호출이 반환 :

+0

고마워요,하지만 그게 작동하지 않았어요, @copiancestral : ( – jhonatanoliveira

1

문제는 당신과 같은 GUI를 호출 할 때이다.

GUI에서 값을 반환하는 방법을 보여주는 Doug Hull의 screencast이 있습니다.

%%% OpenignFCN 
uncomment uiwait 

%%%OutputFCN 
varargout{1} = handles.output; 
% The figure can be deleted now 
delete(handles.figure1); 


%%%CloseReqFCN 
if isequal(get(hObject, 'waitstatus'), 'waiting') 
    % The GUI is still in UIWAIT, us UIRESUME 
    uiresume(hObject); 
else 
    % The GUI is no longer waiting, just close it 
    delete(hObject); 
end 
+0

감사합니다, @Amro, 당신의주의를 위해. 좋은 비디오 였지만 내 질문에 대답하지 못했습니다 .내가 말했듯이, 나는 노력하고있다. 변수를 변수로 업데이트하려면 비디오에서 Doug Hull은 인턴 GUI 변수를 가져 오는 방법을 가르쳤지 만 직접 변수를 가져오고 싶습니다. 아이디어를 얻었습니까? 은 구조를 처리하고 내 GUI에서 가져옵니다. – jhonatanoliveira

+1

@jhow : 늦은 답변을 드려 죄송합니다. 아이디어는 동일합니다. 여는 함수에서 자신의 변수를 초기화하고 ('handles' 구조체 안에 저장하십시오), 버튼 콜백 함수에서 수정하고 마지막으로 출력 함수에서 값을 반환합니다 ('uiwait' 호출 숫자가 삭제 될 때까지 실행을 차단합니다). 'handles' 구조체를 수정할 때마다 GUIDATA를 호출해야한다는 것을 기억하십시오. – Amro

-2
global test 
handles.test = 'ok'; 
0

당신은 다른 기능에서 핸들을 업데이트

handles = guidata(gcf); 

에 추가해야합니다 다음 해당 페이지에서 복사하려면 변화의 목록입니다. 희망이 맞습니다.

관련 문제