简而言之,就是gui在没有创建完所有的控件之前,不能用handles

如果在创建时,非要定义当前的控件一些属性,应该用hObject,比如,创建时定义一个表格的初始值,就用set(hObject,'Data',[1 2 3]

handles= []

是因为,handles在一些函数没有创建的时候是不会建立的,MATLAB自带的注释如下:

function listbox1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to listbox1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: listbox controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end

用过matlab做GUI的人可能者有或者曾经有过这样的疑惑,handles到底是一个什么鬼东西,我又该怎么去操控它。其实handles很简单,只是matlab里的帮助好像把它说的很麻烦罢了。

为了说明问题,我们不访拿户籍管理做一个类比吧,我们知道,我们每个人都有一个名字和一个身份证号,我们可以同名,但我们的身份证号是唯一的。小米做的matlab可能就是借用的这种思想(毕竟都是管理嘛,只不过一个管的是人,一个管的是控件而已)。

matlab里的每个控件都一个编号,就好像我们的身分证号一样,而且它们在整个程序执行期间都是唯一的。它们是在程序打开时由matlab自动分派,并且这个号在程序执行期间是不可改的。程序关闭后这些编号会被自动撤销(其实就是变量嘛,程序一关变量自然就over了),在下次程序启动时会被重新分派,所以你不要指望这次把这个号记住,下次通过这个号再找出对应的控件。但是记住每个控件的号肯定是一个让人头大的事,所以maltab就又给每个控件一个名字Tag,通过Tag我们很容易记住控件的标识。但是名字名字有一个缺点,就是重名的问题,你叫张三,人家也能叫张三,不过好在都是我们给控件命名的,可以避免这一个问题。除了容易记住这一优点外,Tag还有一个优点就是关闭程序后在下次执行时它还是一样的(Tag可以被人为更改,只要你没有改的话它就是不变的),所以下次启动时我们可以通过Tag来找到我们想要的控件。

我们可以看到handles的结构是“Tag:标号”,比如一个控件按钮的Tag是test,标号是100,那么在程序中就有这样一种对应关系test就对应着100,也就是名为test的变量中存着100,而100对应着这个按钮。我们可以更改handles.test的值:

handles.test=99;

guidata(gcf,handles)

但是改过之后你再也不能通过test来找到那个按钮控件了,如果你不幸没有记住那个标号的话,那么你就与那个按钮控件失去联系了。

另外,matlab中获取handles的方法有两种,第一个是通过handles=guidata(gcf)来获得,第二种是通过handles=guihandles来获得,那么这两个有什么区别呢?经过测试发现通过uimenu创建一个新的控件,

h=uimenu(hparent,'Tag','mymenu');

此时用handles=guidata(gcf)所得到的handles中不会有handles.mymenu的(matlab帮助上说了),但是用handles=guihandles得到的却会有handles.mymenu.只有加上下面两句话:

handles.mymenu=h;

guidata(gcf,handles);

才会通过handles=guidata(gcf)得到handles.mymenu;

还应该注意到guidata得到的handles与guihandles得到的handls是不一样的,不能用guihandles得到的handles来覆盖handles.

MATLAB gui handles 未定义 及 理解相关推荐

  1. MATLAB运行提示未定义函数或者变量,MATLAB出现未定义函数或变量

    MATLAB 二元二次函数出图 老是出现错误, xy的个数不同不能计算z值,改为[x,y]=meshgrid(72.00:80.00,65.00:90.00);z=x*pi.*y.*y./100000 ...

  2. C++调用Matlab混合编程未定义函数或变量“javaaddpath“

    C++调用Matlab混合编程未定义函数或变量"javaaddpath" Matlab安装的时候一定要按照按照网上安装的步骤来,是matlab许可证没有许可. 联系:8524791 ...

  3. Matlab GUI handles结构体入门

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

  4. MATLAB:出现 “ 未定义函数或变量 ”

    出现的报错页面: 查找了许多解决方法,主要是关于MATLAB中M文件如何解决"未定义函数或变量"的若干办法 文中详细介绍了报错可能的三种原因. 不过在三种方式均尝试后依旧发现无法解 ...

  5. matlab中出现未定义函数或变量如何解决?

    A=[0 -1 4;9 -14 25;-34 49 64]; B=zeros(3,3); for i=1:3 for j=1:3 B(i,j)=A(i,j); end end disp(B) 复制j矩 ...

  6. matlab initialize函数,未定义函数或变量 'initialization'。

    在网上找到的灰狼算法代码,想解决边坡位移-时间曲线的预测问题,可是只把这些命令流输入进去就显示未定义函数或变量'initialization'.这到底是什么意思呢,还有,有木有大师帮帮忙给讲解一下具体 ...

  7. Matlab GUI handles的相关函数汇总

    1.guidata(hObject, handles) 更新保存在handles中的变量: handles.a = a; % 保存变量 guidata(hObject, handles) %更新变量 ...

  8. matlab int8 函数,未定义与 'uint8' 类型的输入参数相对应的函数 'fitnessty'

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 程序如下: clear all clc tic popsize=15; lanti=10; maxgen=50; cross_rate=0.4; muta ...

  9. matlab function关键字无效,matlab function函数调用, 未定义函数

    当前文件夹看看是不是这个函数脚本文件的文件夹?追问当前文件夹是什么?怎么看?追答软件主界面左侧的当前文件夹www.mh456.com防采集. function rsampley=[0.7 3.4 12 ...

最新文章

  1. 【Codeforces】913C Party Lemonade (贪...)。
  2. 字节跳动开源最新GAN压缩算法,算力消耗可减少至1/46
  3. 程序员成长的10个阶段
  4. 一个完美网站的101项指标.第一部分.概述
  5. python网络爬虫开发从入门到精通_Python突击-从入门到精通到项目实战
  6. 【C语言】qsort函数用法(转)
  7. 【算法】异或 偶数数组中找到一个唯一奇数
  8. linux qemu 运行win10,只用ISO镜像,在Linux系统上用Qemu虚拟机给另一块硬盘安装Windows 10...
  9. python打不开text_python-无法启动并使用TextBlob运行
  10. Python基础知识之二
  11. python 中文官方手册
  12. 解决了sql server 用户 sa 登录失败的问题
  13. 前端激荡三十年,从无到有,从单一到炫彩,技术从未停止!
  14. MATLAB 绘图合集:等高线图contour
  15. 京东笔试——神奇数 【题目描述】东东在一本古籍上看到有一种神奇数,如果能够将一个数的数字分成两组,其中一组数字的和 等于另一组数字的和,我们就将这个数称为神奇数。例如 242 就是一个神奇数,我们能够
  16. linux在vim中搜索文件,技术|超酷的 Vim 搜索技巧
  17. 核桃编程学python吗_西瓜编程和核桃编程哪个好
  18. 用Qemu搭建x86学习环境
  19. 【C语言】scanf语句里关于%c的问题
  20. 最近进行的一次技术选型(工作流引擎)及相关知识介绍

热门文章

  1. 如何解决mysql数据倾斜_什么是数据倾斜?如何解决数据倾斜?
  2. python元祖组成字典_Python基础之元组和字典
  3. easyui前端实现多选框_在实际案例中学习前端开发(第二期)
  4. linux系统里route -n不起作用,Linux系统中traceroute命令使用详解
  5. matlab中 编程如和隐藏,在matlab中编程(如何实时处理)
  6. mysql进程异常_关于MySQL-Proxy子进程异常退出BUG修复
  7. Python:PDF文件转图像
  8. QT不同线程间signal-slot机制的值传递
  9. 几种无线通讯介绍与比较(蓝牙,WiFi,IrDA,NFC,Zigbee,UWB)
  10. 致谢计算机组成原理老师的致谢,计算机组成原理课程报告(40页)-原创力文档...