• matlab callback 数据传递


    M文件中内的每个Callback都可以视为一个独立的可执行的接口,因此,任一个Callback触发后所执行的运算值若要在其他Callback中使用,就无法与MATLAB工作空间内的变量继续执行操作,也就是说每个Callback之间无法直接做沟通操作,因此变量的传递会有问题。主要的几种数据传递方式主要有:
    (1)宣告为全局变量
    将欲传递的变量在传递双方的Callback位置中都设置为全局变量,就可以直接在任一方的Callback中调用。这种方式是最简单的操作方式,但是当GUI全局变量太多时,在执行上就可能造成混乱。
    (2)应用对象的userdata属性
    通过对象的userdata属性可以直接进行各个Callback之间的数据存取操作。首先必须先将数据存储到一个特定的对象中,假设该对象的句柄值为uihandle,需要存储的数据为value,将输入以下程序即可:
    set('uihandle','UserData',value);
    此时,value数据已经存储到句柄为uihandle的对象内,在执行过程中若要取回该变量就可以通过以下方式在任一Callback中获取该值。
    value=get('uihandle','UserData');
    使用这种方式在操作上固然简单方便,但是每一个对象仅能存取一个变量值,因此当同一对像存储两次变量时,先前的变量值就会被覆盖掉,这样对于复杂的操作会造成诸多不便,因此一般都是用Userdata存取简单的数据。
    (3)应用setappdata,getappdata与rmappdata
    使用setappdata,getappdata与rmappdata函数进行数据传递是最用弹性的,此种方式在使用上非常类似UserData属性的操作,但它克服了UserData的缺点,是一个对象可以存取多个变量,因此会比UserData属性在操作上更具有弹性和数据安全性。
    用法如下:
    setappdata(uihandle,'VariableName',vaule);
    value=getappdata(uihandle,'VariableName');
    rmappdata(uihandle,'VariableName');
    另外一种用法是结合handles结构与guidata函数,虽然在操作上非常简单,但是当变量过多时会使GUI在程序上变得比较复杂,日后程序排错时可能比较费时,因此不推荐使用。
    使用方式如下:
    如果在对象的Callback中存取变量值到VARdata字段中,使用如下程序:
    handles.VARdata=A;%将A存放到handles的VARdata字段中去
    guidata(hObject,handles);%将新的handles值存储起来
    如果在另一个Callback中使用变量A,使用如下程序:
    A=handles.VARdata;
  • 相关阅读:
    巡风源码阅读与分析---nascan.py
    自动化代码中,用到了哪些设计模式?
    jmeter提取器的使用及说明
    jmeter的插件管理—jpgc插件下载安装
    unittest之mock测试
    jmeter环境配置及基础使用
    jenkins发送email邮件的配置
    软件性能测试基础说明
    python发送email邮件
    使用SQLyog对mysql数据库的数据结构进行导出、导入
  • 原文地址:https://www.cnblogs.com/ouyangping/p/7895062.html
Copyright © 2020-2023  润新知