http://www.cnblogs.com/duanp/archive/2008/11/29/Matlab-GUIDE.html
函数调用


在一个m文件中,可以定义多个函数,但是文件名一定要与第一个函数(主函数)一致,
该文件中其他函数则为本文件的私有函数,外部不可访问(可以通过参数调用的方法访问,下面会描述)。

例如在一个程序中,创建一个fig后,会生成这样一个m文件:

function varargout =febirdfun(varargin)
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(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

解析 一下这个主函数:首先 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为主函数)
    febirdfun("@push_button_Callback",gcbf,[])
  这样的调用就可以调用文件里面的子函数。

当然也可以使用其他文件里面的函数作为callback,不过那样的话,数据传递会麻烦一些。

下面看figure Openning Function

%================================

function Main_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;
% 通常在这里面定义自己的数据结构例如

s=struct("P1",v1...
             "P2",v2);
handles.MyStruct=s;
% 更新handles数据结构  非常重要!!
guidata(hObject, handles);

%================================
function varargout = Main_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;

这个函数是输出返回值的定义

注意:  matlab 中,function 对应的 end 可以没有,但是随着版本的更新,end将会被要求。

六:数据传递

在matlab GUI程序中进行值传递我经常使用的两种方法:

1.利用主函数 的 handles 数据结构传值

例如在某一个图像窗口句柄 中有一个对象 handles(可以定义自己的数据结构)

那么在一个子Callback函数中,可以通过handles传递数据:

function  sliderbar1_Callback(hObject,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); %更新 handles !!重要

end

2.利用控件的 UserData 来传值

每一个控件一般都有一个属于自己的自定义域,userData,你可以定义这样一个域用来保存自己的数据,例如在定义 timer 的 TimerFcn中

t1=timer('TimerFcn',{@Timer1Fcn},'ErrorFcn',@Timer1ErrorFcn},'Period',1.0,'ExecutionMode','fixedrate');

t1.Userfata=handles.MyStruct;

这里 Timer1Fcn的调用看似没有传入任何参数,实际上此函数的定义一定要有至少两个参数

function Timer1Fcn(obj,eventata)

obj.UserData=XXXXX;%可以这样共享数据
 
end

当然Timer定义的时候允许这样传递一个参数,当然这样也可以进行传值.

t1=timer('TimerFcn',{@Timer1Fcn,handles},'ErrorFcn',{@Timer1ErroFcnr,handles},'Period',1.0,'ExecutionMode','fixedrate');

感谢:http://blog.sina.com.cn/s/blog_45b486b80100gs1p.html

matlab函数调用及数据传递的更多相关文章

  1. matlab callback 数据传递

    M文件中内的每个Callback都可以视为一个独立的可执行的接口,因此,任一个Callback触发后所执行的运算值若要在其他Callback中使用,就无法与MATLAB工作空间内的变量继续执行操作,也 ...

  2. activity之间的数据传递方法

    1  基于消息的通信机制 Intent--------boudle,extra 用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int.string等 详细介绍下Intent机制 Inte ...

  3. EXTJS中grid的数据特殊显示,不同窗口的数据传递

    //EXTJS中grid的数据特殊显示renderer : function(value, metaData, record, rowIndex, colIndex, store, view) { v ...

  4. Activity系列讲解---数据传递

    在Android中,不同的Activity实例可能运行在一个进程中,也可能运行在不同的进程中.因此需要一种特别的机制帮助我们在Activity之间传递消息.Android中通过Intent对象来表示一 ...

  5. vue2.0 组件之间的数据传递

    组件间的数据传递// 父组件<template><div class="order"><dialog-addpro v-on:closedialog= ...

  6. ASP.NET MVC3中Controller与View之间的数据传递总结

    一.  Controller向View传递数据 1.       使用ViewData传递数据 我们在Controller中定义如下: ViewData["Message_ViewData& ...

  7. ASP.NET MVC3中Controller与View之间的数据传递

    在ASP.NET MVC中,经常会在Controller与View之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨: 一.  Controller向Vie ...

  8. 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递

    通过第一天的学习之后,我们相信您已经对MVC有一些基本了解. 本节所讲的内容是在上节的基础之上,因此需要确保您是否掌握了上一节的内容.本章的目标是在今天学习结束时利用最佳实践解决方案创建一个小型的MV ...

  9. MVC数据传递

    一.数据传递 1.ViewData[]: 用法:action中:ViewData["key"]="aaa";,V层接收ViewData["key&qu ...

随机推荐

  1. JS 的子父级页面调用

    window.frames["iframevehquery"].add(); // 父页面调用嵌套子页面的js函数, iframevehquery 为 iframe 的name值, ...

  2. maven install 报错Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project*****

    [ERROR]Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-co ...

  3. js获取多个标签元素的内容,并根据元素的内容修改标签的属性

    <html > <head> <title>无标题文档</title> </head> <body> <div class ...

  4. Date的那一大堆事儿--1

    String perfTimeStr = "";// 统一设置日历格式 Calendar calendar = Calendar.getInstance(); calendar.s ...

  5. 带不带protype的区别

    总结写在前面: ①:带有protype:表示类的扩展,必须new后才能使用. ②:不带protype:属于静态方法,直接调用即可. html代码: <!DOCTYPE html> < ...

  6. [Spring] spring-session + JedisPool 实现 session 共享

    1.至少导入四个jar包: jedis spring-session spring-data-redis commons-pool2 2.bean配置 <?xml version="1 ...

  7. Java GC系列(2):Java垃圾回收是如何工作的?

    本文由 ImportNew - 伍翀 翻译自 javapapers. 目录 垃圾回收介绍 垃圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 本教程是为了理解基本的Java垃圾回收以及它是如何 ...

  8. sina 行情api

    http://blog.csdn.net/simon803/article/details/7784682

  9. 张艾迪(创始人):世界级天才女孩Eidyzhang

    让整个世界与我们一同解读世界第一天才:Eidyzhang 她改变了整个世界.她的故事也激励了整个世界的不论亚洲.欧洲.非洲.南美州.北美洲.南极洲 天才Eidyzhang的故事激励了整个世界不论黑人. ...

  10. .net读取xml文件中文乱码问题解决

    读取XML的编码方式Encoding.UTF8 要和<?xml version="1.0" encoding="utf-8"?>的encoding ...