2017-05-18 4 views
0

Matlab GUI를 사용하여 버튼을 눌렀을 때 실시간으로 오디오 출력을 전환하는 프로젝트에서 작업하고 있습니다. Matlab GUIDE 파일과 GUI 액션을 듣는 Audio System Toolbox를 사용하는 함수가 있습니다.OpeningFcn Matlab GUIDE - 올바른 순서로 핸들 및 호출 함수 초기화

GUIDE 파일에는 GUI가 표시되기 전에 다양한 핸들을 선언하는 OpeningFcn이 있습니다. OpeningFcn에서 "handles.AttenuationFactor"를 선언합니다. 사용자가 나중에 GUI의 버튼을 누르면 handle.AttenuationFactor가 그에 따라 변경되는 것이 좋습니다.

별도의 기능을 GUI 동작을 경청하는 데 아무런 문제가 없습니다. 간단히 GUI 개체를 GUI 개체에서 검색합니다 :

gui = findobj('Tag','GUI’); 

if ~isempty(gui) 
    % get handles 
    gdata = guidata(gui); 
    AttenuationFactor = gdata.AttenuationFactor; 
end 

%% Perform calculations with attenuation factor 

다음은 피클입니다. GUI를 수신하는 함수는 언제 호출합니까?

마지막 코드 줄 guidata (hObject, handles)가 아직 호출되지 않았으므로 'GUI'에서 정보를 검색 할 때 'handles.attenuationFactor'가 존재하지 않기 때문에 OpeningFcn에서 호출 할 수 없습니다!

buttonpress의 콜백 함수에 함수 호출을 넣으려고했으나 모든 buttonpress에 대해 한 번만 실행해야하는 코드를 작성해야합니다.

함수 호출 전에 핸들을 강제로 업데이트 할 수있는 방법이 있습니까?

답변

1

개구부에서 기준 값을 설정해야합니다. 어쩌면 전역 변수를 호출하고 값을 설정할 수 있습니다. 그에 따라 핸들을 업데이트하십시오.

matlab에서 set/get 함수를 사용하여 핸들을 처리해야합니다. handles.attenuationFactor를 설정하면 무엇을 의미합니까?

사용자가 attenuationFactor의 값을 변경하면 버튼의 콜백에서 값이 변경되면 매우 간단하게 값을 검색 할 수 있습니다. 예를 들어 get(handles.attenuationFactor,'Value')입니다.

+1

답변 해 주셔서 감사합니다. 다른 함수에서 attenuationFactor라는 변수를 만들고이를 0으로 설정했습니다. 그런 다음 'isfield (gdata,'attenuationFactor ')'를 사용하여 핸들을 확인하고 프로그램이 초기화되지 않도록 초기화했는지 확인합니다 존재하지 않는 핸들을 찾으려고 할 때 충돌이 발생합니다. – matiastofteby

+0

확인. 그것도 작동해야합니다. – 16per9