2013-05-22 15 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