2014-12-19 83 views
1

我在Matlab中構建了此GUI以與數據交互。我創建了一個數據環境對象來促進與數據的交互。該對象觸發事件,我希望GUI可以聽取其中的一些事件。所以,正如你在下面的代碼中看到的那樣,我使用指令addlistener將事件鏈接到本地​​函數。問題是這個本地函數無法訪問GUI句柄,你有沒有想過如何解決這個問題?謝謝在Matlab中由gui之外的對象觸發的回調函數中訪問gui句柄

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 2014-12-19 21:23:23