2013-03-14 69 views
1

我試圖找到一個方法來指定我的'KeyPressFcn'函數返回一個值。'KeyPressFcn'函數返回一個值

目前我有:

figure('KeyPressFcn', @myFunc); 

這很好,但我需要訪問myFunc的返回

的價值有沒有辦法做到這一點?

我一直在http://www.mathworks.com/help/matlab/ref/figure_props.html#KeyPressFcn,但看看他們展示的例子,我仍然不知道發生了什麼。

他們使用的例子有:

figure('KeyPressFcn', @(obj,evt)disp(evt)); 

它說,它說的函數傳遞的事件結構。那麼,爲什麼它不是簡單的:

figure('KeyPressFcn', @disp(evt)); 

在函數名前的(obj,evt)項的意義是什麼?

什麼是evt?什麼是obj?什麼是

+0

我認爲最快(最醜)的方式可能是將值存儲在全局變量中。 – 2013-03-14 18:53:37

回答

2

你不能在MATLAB中使用回調函數返回一個值。相反,您可以使用像setappdata這樣的函數。您可以在需要時使用getappdata獲取您設置的數據。

您可以像這樣使用它們:

function myFunc(obj, evt) 
    a = 42; 
    setappdata(0, 'varName', a); 
end 

回調之外:

otherVarName = getappdata(0, 'varName'); 

otherVarName將有42


obj值,其對象回調正在執行。 evt是事件數據。 GUIDE documentation這樣說:

hObject - 對象的句柄,例如,GUI組件,爲此 回調被觸發。對於按鈕組SelectionChangeFcn 回調,hObject是所選單選按鈕的句柄或切換 按鈕。

EVENTDATA - 由用戶的動作,例如 如通過在MATLAB 結構的形式的組分(或空矩陣爲不產生 EVENTDATA組件)發射的表選擇

觸發的事件的序列這裏,hObjectobjeventdataevt

比方說,你有一個編輯框,你想獲得用戶編寫的文本。爲此,您需要編輯框的句柄。這就是hObject給你。

function buttonCallback(hObject, eventdata) 
    str = get(hObject, 'String'); 
end 
+0

非常感謝! – kbirk 2013-03-14 19:31:50