2014-12-19 5 views
1

Я построил этот графический интерфейс в Matlab для взаимодействия с данными. Я создал объект среды данных для облегчения взаимодействия с данными. Этот объект запускает события, и я хочу, чтобы GUI прослушивал некоторые из этих событий. Итак, как вы можете видеть в приведенном ниже коде, я использую addlistener команды, чтобы связать событие с локальной функцией. Проблема в том, что эта локальная функция не имеет доступа к ручкам GUI, есть ли у вас какие-либо мысли о том, как решить эту проблему? СпасибоДоступ к gui-дескрипторам в функции обратного вызова, вызванной объектом за пределами gui в Matlab

function varargout = myGUI(varargin) 
... 
end 

function varargout = myGUI_OutputFcn(hObject, eventdata, handles) 
    varargout{1} = handles.output; 
    dataEnv = getappdata(hObject.Parent, 'ratData'); 
    addlistener(dataEnv,'TrialChanged',@respond_TrialChanged); 
end 

function respond_TrialChanged(dataEnv, eventData) 
    do_something(handles) % I want to access the GUI handles here 
end 

function do_something(handles) 
    ... 
end 

ответ

1

Вы можете использовать функции anonymus как обратные вызовы, которые предоставят ручки. Например:

function varargout = myGUI_OutputFcn(hObject, eventdata, handles) 
    varargout{1} = handles.output; 
    dataEnv = getappdata(hObject.Parent, 'ratData'); 
    addlistener(dataEnv,'TrialChanged',@(e,d) respond_TrialChanged(e,d,handles.output)); 
end 

function respond_TrialChanged(dataEnv, eventData, handles) 
    do_something(handles) % I want to access the GUI handles here 
end 

tird аргумент анонимных функций обрабатывать или ручки, или все, что вы хотите передать в сферу myGUI_OutputFcn в respond_TrialChanged.

Надеюсь, это поможет.

+0

Это не кажется мне самым элегантным способом решения этой проблемы, но это работает очень хорошо! Благодаря! – PierreE

Смежные вопросы