2013-05-22 14 views
1

我正在用Matlab編程我的第一個GUI。我已經構建了GUI的視覺方面,現在我正在編寫回調函數。當我編寫回調函數時,我需要傳遞兩個句柄,但由於某種原因,只有一個句柄被傳遞給該函數。我確信這確實是一個很基本的問題,但我真的很努力地克服這個問題,並且在文檔中找不到任何理由爲什麼這樣做不起作用Matlab回調函數只能看到一個參數傳遞給它

回調函數用於按鈕,兩個用戶輸入的參數,然後使用這些數字來建立傳遞函數。這兩個參數被輸入到可編輯的文本框中,使用句柄orderEdit和timeConstEdit。我可以提取我需要的字符串,然後將其轉換爲數字數據格式。代碼如下所示

首先,我設置回調標誌按鈕rtdButton

set(rtdButton, 'Callback', @rtdPlot); 

回調函數的前兩行如下(該功能的其餘部分應工作,一旦我可以得到這些值):

function rtdPlot(orderEdit,timeConstEdit) 
    n = str2num(get(orderEdit, 'String')); 
    tau = str2num(get(timeConstEdit, 'String')); 

但是我得到的錯誤

??? Error using ==> str2num at 33 
Requires string or character array input. 

Error in ==> mixingModel>rtdPlot at 148 
     tau = str2num(get(timeConstEdit, 'String')); 

??? Error while evaluating uicontrol Callback 

任何幫助Ø作如何做到這一點,將不勝感激

編輯:基於蜜蜂的帖子正確的代碼如下:

集(rtdButton, '回調',{@ rtdPlot,orderEdit,timeConstEdit});

function rtdPlot(src,eventdata,arg1,arg2) 
     n = str2num(get(orderEdit, 'String')); 
     tau = str2num(get(timeConstEdit, 'String')); 

乾杯 約翰

回答

2

從MATLAB文檔:

可以定義回調函數將它們添加到函數定義接受額外的輸入 參數:

功能myCallBack函數(src,eventdata,arg1,arg2)當使用回調函數的附加 參數時,您mu ST設置 屬性到一個單元陣列的值(即,包圍功能句柄和在花括號 參數):

數字( 'WindowButtonDownFcn',{@ myCallBack函數,ARG1,ARG2})

http://www.mathworks.com/help/matlab/creating_plots/function-handle-callbacks.html

+1

另一個有用的習慣是'set(handle,'Callbac k',@(a,b)函數(a,b,c,d));' –

+0

謝謝,那正是我需要的 – speeder1987

1

看一看Write Code for Callbacks,尤其是部分使用單元陣列回調

如果您需要爲回調指定參數,則可以將 函數名稱字符串或函數句柄和參數包裝在單元格 數組中。

  • 將回調標識爲字符串以執行具有該名稱的文件,例如pushbutton_callback.m
  • 將回調標識爲執行當前正在執行的代碼文件中的本地函數或嵌套函數的函數句柄,例如 (例如@pushbutton_callback)。如已經提到的
1

的一種方式是包圍功能手柄和單元陣列內的附加參數:

set(rtdButton, 'Callback', {@rtdPlot, orderEdit, timeConstEdit}) 
function rtdPlot(src, eventdata, orderEdit, timeConstEdit) 

替代地,可以定義回調爲嵌套函數,而不經過一個cell結構但簡單@callback

function mainGui 
% Create main gui graphical elements here and collect graphic handles into a structure 
h.pushb(1) = ... 
h.pushb(2) = ... 
... 

    function pb1_callback(src,event) 
     % h.pushb(1) and others are visible 
    end 

end