https://blog.csdn.net/xrdsjb001/article/details/76373984

handles结构体是一个以GUI中所有控件的Tag属性为字段的结构体,每个字段的取值就是对应控件的句柄!句柄类似于C语言中指针,它是某个对象的唯一标识符,通过句柄就可以找到你需要的对象了,图形对象的句柄一个double型数据。
      一个GUI中有三个控件,对应的Tag属性和句柄分别为tag1和h1,tag2和h2,tag3和h3,此时handles结构体则具有如下形式
handles.tag1==h1
handles.tag2==h2
handles.tag3==h3
      换句话说handles.tag1就是指向Tag属性值为tag1的控件,handles.tag1(句柄)就是该控件的唯一标识符!

handles结构体保存了窗体中所有Pushbutton,Radiobutton,StaticText,以及Figure 自身等控件的句柄

==================================================================================

如果获取radiobutton1的属性,需要使用get()函数,get是用来获取控件属性的。

  1. get(handles.radiobutton1) % 如果没有指定属性,默认返回所有属性

我们只对radiobutton1的string属性兴趣的话,则可以使用get(handles.radiobutton1,'string') % 获取指定属性。

2.  如果想修改radiobutton1的string属性,则需要使用set()函数,set(handles.radiobutton1,'string','hello world') % set(句柄,'属性名',属性值)。原来radiobutton1的显示字符串是不是立即变为“hello world”。

====================================

https://blog.csdn.net/Debug_Snail/article/details/49049069重要!

1.  数据怎么在不同的控件之间传递

每一个控件的回调函数头:function myc_Callback(hObject, eventdata, handles)

第一个参数是hObject,是跟callback所关联控件的handles,在它自己的callback下,可以用代号-> hObject 来调用它。不用管那么麻烦的概念,只用知道,控件自己的回调函数调用自己的属性,只用hObject.属性名  就可以。
     第二个参数是MATLAB的保留参数。
     第三个handles是这个GUI界面的代号。可以通过它获取这个界面的所有信息。所以在控件A自己的回调函数中,要获取或者设置别的控件的属性,就用  handles.别的控件Tag.属性  。

handles格式是一个存放数据的缸。控件的handles是小缸,它的名字叫做hObject;GUI界面的handle是一个大缸,并且这个缸名字也叫做handles;大缸里存放了所有的小缸和所有用户数据,你只需 handles.控件A的tag  就可以存取控件A的信息。

GUIDE创建了一个大缸:结构体handles,handles包括了figure中所有控件的句柄,也包括figure的句柄。

比如一个GUI包括一个edit text, 一个panel,一个pop-up menu和一个pushbutton,GUIDE用每个控件的tag来命名handle,handles结构体内容如下:

figure1: 160.0011

edit1: 9.0020

uipanel1: 8.0017

popupmenu1: 7.0018

pushbutton1: 161.0011

output: 160.0011

在任何地方,handles.自己的变量名 = 某些值     (给结构体添加成员变量)定义自己的变量
     在任何地方 ,b=handles.自己的变量名     (结构名加点号来引用成员变量)可以得到这个变量值,可以修改它。
     guidata(hObject, handles); 在函数末尾来保存你对handles和hObject的操作。(不然你自定义的变量就没了)

guidata( 视窗句柄 , 全部句柄 ),如果视窗句柄位置不是视窗句柄,而是一个控件的句柄,那么这个控件的父视窗(parent figure)会被调用。所以guidata中的视窗句柄 可以是figure的句柄,也可以是figure内所包含的控件的句柄,不管是哪种情况,最终handles会和figure相关联。全部句柄即GUI句柄handles

2. 怎么在控件callback函数体之外获取控件和用户自己的数据

GUI界面的handles保存着所有控件的信息以及用户自己的数据,只要获取GUI的handles就可以获取所有。

比如在自己定义的函数里获取handles,只需将handles作为参数传进去就可。

function my_function(handles), handles是GUI的handles,可以调用GUI内任意一控件的信息,get(handles.你控件的tag,'要获取的属性名'): temp=get(handles.my_popup,'Value');

例如:

计时timer中:

% 在figure创建完成后创建 timer 对象,将handles传入Callback函数

t = timer('TimerFcn', {@timerCallback, handles}, 'ExecutionMode', 'fixedDelay', 'Period', 1.0);

% 设置窗口关闭的回调函数

set(handles.figure1, 'DeleteFcn', {@DeleteFcn, t});

% 启动定时器

start(t);

%传入handles

function timerCallback(obj, event, handles)

temp=get(handles.my_popup,'Value');

end

% 窗口关闭的响应函数-停止计时器

function DeleteFcn(hObject, eventdata, t)

stop(t);

end

3 在其他子函数或者非figure内控件的callback内保存用户数据到guidata。

GUIDE生成了一个包括所有GUI句柄的结构体:handles,我们可以保存用户数据到其中。

guidata( 视窗句柄 , 全部句柄 )   guidata(hObject, handles);

如果视窗句柄位置不是视窗句柄,而是一个控件的句柄,那么这个控件的父视窗(parent figure)会被调用。所以guidata中的视窗句柄 可以是figure的句柄,也可以是figure内所包含的控件的句柄,不管是哪种情况,最终handles会和figure相关联。全部句柄即GUI句柄handles

在figure控件callback之内调用 guidata(hObject, handles);hObject是控件的句柄。如果在其他子函数或者非figure控件的callback知中使用guidata保存数据,hObject就不再是控件句柄,会出错。所以我们要用figure的句柄代替hObject,即handles.figure1, guidata( handles.figure1 , handles)-》保存数据的作用。

例如在上述计时器的callback函数中保存data: guidata( handles.figure1 , handles);

4、在不同GUI之间传递数据

传入  那就来看打开一个GUI界面时,传给他的参数有哪些。
     
     function mygui_OpeningFcn(hObject, eventdata, handles, varargin)
    所有的启动参数都是通过varargin传到它的OpeningFcn里面的。那启动参数可以是哪些呢? 
    1、figure,也就是窗口参数。
         比如说position之类
         例如:打开这个GUI时,使用这个命令  mygui('Position',[434 234 234 34])则表示打开窗口在这个位置;还有哪些可控属性可以查help。
     2、自定义参数 。
       如果传入的参数不是figure的属性(matlab查找不到你输入的属性名),则你输入的参数作为一个向量存放在varargin里面。
       比如mygui('路人甲','80‘),那varargin{1}存放了'路人甲',varargin{2}=’80‘  
     那mygui中对这读取两个数据进行反应,就达到了传入参数的目的。

5. 传出:将你要输出的数据存在handles.output里面,在GUI任意地方
              handles.output=数据1;
              handles.secend_output=数据2;
  然后在GUI的outputFcn里面加上
             varaginout{1}=handles.output;
             varaginout{2}=handles.secend_output;
这样就把数据传出来了。

matlab handles结构体相关推荐

  1. matlab handles结构体及用法

    在本节教程中,我们 将讨论什么handles结构体,以及 如何使用set/get命令.如果您压根没有接触过GUI编程,建议您先看下这篇文章 http://www.matlabsky.com/threa ...

  2. MATLAB handles 结构体及用法

    在本节教程中,我们将讨论什么handles结构体,以及如何使用set/get命令.如果您压根没有接触过GUI编程,建议您先看下这篇文章http://www.matlabsky.com/thread-5 ...

  3. Matlab GUI handles结构体入门

    例程:help文档  Create a Simple UI Using GUIDE % Create the data to plot. handles.peaks=peaks(35); handle ...

  4. matlab根据结构体数组,用邻接矩阵和序遍历创建树形结构:

    matlab根据结构体数组,用邻接矩阵和先序遍历创建树形结构: https://blog.csdn.net/C_Redrock/article/details/84980241

  5. matlab struct 结构体

    matlab 的结构体第一次让 matlab 中的变量有了可以通过 .访问的成员变量,有了类的含义,甚至是面向对象的意味. 1. 结构体的赋值 结构体的赋值,这里不建议用下面这种形式进行统一赋值, s ...

  6. Matlab:结构体数组

    Matlab:结构体数组 创建标量结构体 访问字段中的值 对非标量结构体数组进行索引 当您有要按名称组织的数据时,可以使用结构体来存储这些数据.结构体将数据存储在名为字段的容器中,然后您可以按指定的名 ...

  7. MATLAB 访问结构体

    MATLAB 访问结构体 如何查看matlab的结构体中有多少个元素? ids = fieldnames(rois); length(ids)

  8. 【matlab】结构体

    matlab中的结构体使用赋值语句来创建结构体 >> person(1).name='anna'; >> person(1.weight)=80; >> perso ...

  9. Matlab中结构体struct创建和使用

    在项目上遇见了调用api接口,接口返回的信息为struct,故探讨一下matlab的struct结构体 1.struct结构体创建 创建结构体数组有两种方式,分别为直接创建和使用struct函数 1. ...

最新文章

  1. BeautfuiSoup4解析器
  2. 使用Tensorflow构建和训练自己的CNN来做简单的验证码识别
  3. 树莓派VNC server设置开机自启动
  4. opengl 安装_一步步学OpenGL(34) -《GLFX,一个OpenGL效果库》
  5. 边缘计算的爆发为安防全产业带来了怎样的变化?
  6. 95-910-330-源码-FlinkSQL-Calcite-Flink结合Calcite
  7. 原型设计应当掌握的四个设计思维:初始、常态、边界、错误
  8. MaskFlownet图
  9. 至强3系列服务器cpu吗,做3D MAX是要求CPU好一点 还是显卡好一点? CPU的话是界面CPU(i 系列)好还是服务器CPU(至强系列)好?...
  10. 漫游流量 android,人在国外 怎么设置小米手机国际漫游指定app使用流量?
  11. 考研逻辑-逻辑4主讲人:王超-2020-08-15
  12. [转][晓月风瑟推荐]值得用一生来品味的100句凡人语录
  13. c语言罗马数字转十进制,罗马数字转十进制的三种方法
  14. 在BricxCC中用C++语言为EV3编程
  15. 对SLAM和自动驾驶定位的思考,最新自动驾驶视觉SLAM方法综述!
  16. hook(2)Activity启动流程,安卓开发实战
  17. 30个精美的简单网站
  18. 案例分析警示安全隐患:免费WiFi购物卷走账户余额
  19. 搜狗输入法语音转文字体验报告
  20. 【Matlab】开发环境介绍及学习方法

热门文章

  1. 小程序用户头像昵称获取不到解决办法
  2. Prism 模板包,快捷创建Prism程序
  3. vue按钮点击事件不传递到父控件
  4. 单线、三线和BGP服务器的区别
  5. 25_类和面向对象的概念
  6. 考研英语小程序哪个好用?
  7. 八年级上册历史知识点(第2课 第二次鸦片战争)
  8. 全球最火的程序员学习路线!java私塾初级模拟银源代码
  9. RT-Thread学习笔记五——临界区与临界区保护
  10. 回首2016,展望2017