Callback function就是回调函数。
使用uicontrol创建pushbutton并指定其“Callback”属性后,就告诉了MATLAB当我们按下该按钮时就调用这个函数(即,程序编写者告诉MATLAB按下按钮时需要调用的函数,然后当我们按下按钮时MATLAB帮助我们调用这个函数——而不需要我们自己在代码中显式调用这个函数)。
MATLAB帮助文档中提到,uicontrol的“Callback”要么指定的是一个字符串——表示一条或多条合法的MATLAB表达式,要么是一个函数的句柄(或者说函数地址,总之一个函数句柄就表示一个函数),要么是一个cellarray,其中包含了函数名/函数句柄外加你想要传递给该函数的参数。
使用代码(也可以使用GUIDE定义回调函数)指定Callback function的方法具体参考:
(在MATLAB命令窗口中输入doc命令,打开文档窗口,在左侧Contents中选择以下项)
MATLAB/User's Guide/Creating Graphical User Interface/Create GUIs Programmatically/Write Code for Callbacks/Specify Callbacks in Function Calls
在你的代码中,dd1是一个自定义函数,所以你应该这样定义:
定义一个函数文件dd1.m,例如:
function dd1
msgbox('MATLAB calls dd1.');
end
放置到MATLAB的当前目录下。例如,如果你的GUI代码放在D:\MyWorks\MATLAB\GUI里,那么就把dd1也放在该目录下。如果你的代码是直接在命令行中敲的,你可以执行以下cd命令看一下MATLAB的当前目录,然后把dd1.m放到该目录下即可。
如果dd1包含参数,你可以这样定义:
function dd1(say_what)
msgbox(say_what);
end
你的代码:
pbstart = uicontrol(gcf, 'style', 'pushbutton', 'position', [50 160 100 50],'string','1','callback','dd1 ''Hello, world!''; dd1 Greate!');
如果你想把UI代码和dd1的定义放在同一个文件中:
function main
pbstart = uicontrol(gcf, 'style', 'pushbutton', 'position', [50 160 100 50],'string','1','callback','dd1 ''Hello, world!''; dd1 Greate!');
function dd1(say_what)
msgbox(say_what);
end
end
至于传递函数句柄或者传递一个包含函数句柄和函数参数的元组,这两种方法就不多说了。毕竟MATLAB帮助文档中讲的要比我讲的详细的多,也专业的多(而且,我还很可能出错,如果这样的话,请以MATLAB offcial manual为准)。
其实,对于初学者而言,你完全可以使用matlab guide创建gui界面,而不必写这么多的代码!!