函数调用
可以在一个m文件中定义多个函数,但文件名必须与第一个函数(主函数)匹配。
此文件中的其他函数是此文件的专用函数,不能从外部访问。 可以通过参数调用的方法访问。 后述。
例如,如果以程序方式创建fig,则会生成与以下示例类似的m文件:
functionvarargout=febirdfun (vararg in )
gui_Singleton=1;
GUI_state=struct(GUI_name ),mfilename,
' gui_Singleton ',gui_Singleton,
' gui_OpeningFcn ',@febirdfun_OpeningFcn,
' gui_OutputFcn ',@febirdfun_OutputFcn,
' gui_LayoutFcn ',[],
' gui_Callback ',[];
if nargin
ischar(varargin{1} )
GUI _ state.GUI _ callback=str2func (vararg in {1} );
结束
if nargout
[ vararg out { 13360 NAR gout } ]=GUI _ main fcn (GUI _ state,varargin{:} );
else
GUI_mainfcn(GUI_state,varargin{:} );
结束
让我们来分析一下这个主函数。 首先,gui_State是一个结构,指定figure打开函数和输出函数
开始
如果gui_CallBack为空且输入参数的数目不为0,则下一个输入的第一个参数将传递给gui_State.callback。
在接下来传递的gui_mainfcn函数中进行处理。 gui_mainfcn基于传递给gui_State的参数
确定是运行函数,还是打开fig文件以运行OpeningFcn和OutputFcn。
如果gui_Callback为空,请运行打开主窗口的fig文件。 否则,请调用子函数
该函数的作用如下。
1 .输入无参数时,可以打开fig文件并初始化控件
2 .指定要调用的函数名称时,可以将其用作其他控件callback。 (实际上是调用同一文件中的子函数。 )
例如,某个控件的callback中写道: ((febrdfun为主函数) )。
ebird fun (' @ push _ button _ callback ',gcbf,[] ) )
的调用中,可以调用文件中的子函数。
当然,也可以将其他文件中的函数用作callback,但这样做会使数据传输变得麻烦。
让我们来看看figure Openning Function
%==================================即%=======
function main _ opening fcn (h object,eventdata,handles,
varargin )
handles.output=hObject;
%通常,您可以在此定义自己的数据结构
s=struct(P1 ),v1 .
' P2 ',v2;
handles.MyStruct=s;
更新handles数据结构非常重要!
Guidata(Hobject,handles );
%==================================即%=======
functionvarargout=main _ output fcn (h object,eventdata,
手动)
varargout{1}=handles.output;
此函数是输出返回值的定义
注意,在:矩阵中,没有与函数相对应的end,但是随着版本的更新要求end。
数据传输
在matlab GUI程序中传递值的两种常用方法:
1 .利用主函数的handles数据结构传值
例如,图像窗口句柄具有对象handles,通过该对象可以定义自己的数据结构
子Callback函数可以通过handles传递数据。
functionsliderbar1_ callback (h object,eventdata,handles ) )。
%% eg1
v1=get(hobject,' value ' );
obj=handles.Text1 %直接将Tag定位到Text1的控件
set(obj,' value ',v1 );
%% eg2
handles.MyStruct.P1=v1; 更改handles的数据
Guidata(Hobject,handles ); 更新硬件! 很重要
结束
2 .利用控件的UserData传递值
每个控件通常都有自己的自定义域,userData。 您可以定义这样的域以存储自己的数据。 例如timer的
在TimerFcn中
T1=timer () timerfcn )、{@Timer1Fcn}、ErrorFcn )、@Timer1ErrorFcn}、Period )、1.0、ExecutionMode )、fix ion mon mode
t1.UserData=handles.MyStruct;
在这里,Timer1Fcn的调用看起来没有传递参数,但实际上此函数的定义至少需要两个参数
函数时间R1 fcn (obj,eventata ) )。
obj.UserData=XXXXX; %可以这样共享数据
结束
当然,在定义了Timer时,可以这样传递参数。 当然,这样也可以给你一个值。
T1=timer () timerfcn )、) {@Timer1Fcn,Handles )、(ErrorFcn )、) {@Timer1ErroFcnr,Handles )、) Period、1.
以上内容来源于百度空间.