文本框赋值guide matlab,科学网-Matlab: 学习GUI (使用GUIDE时需注意的几个问题)-刘磊的博文...
在博文《Matlab:学习GUI(一个简单的例子)》(介绍的方法是完全用代码来建立一个GUI,实际上Matlab本身有一个设计GUI的交互系统——GUIDE,用户可以使用该系统更方便的建立自己的GUI.
本文将介绍使用GUIDE时常常遇到的几个问题。本文将通过一个简单的例子来说明问题,读者朋友们可以边看边操作。在command line输入guide回车,打开Layout Editor.建立一个空白的模板(Blank GUI),建立一个push button,将“String”改为“Close”,save并将文件名命名为test,如下图:
save后,Matlab会生成两个文件test.M和test.fig,打开test.M,如下:
functionvarargout = test(varargin)
% Begin initializationcode - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename,...
'gui_Singleton', gui_Singleton,...
'gui_OpeningFcn', @test_OpeningFcn,...
'gui_OutputFcn', @test_OutputFcn,...
'gui_LayoutFcn', [] ,...
'gui_Callback', []);
ifnargin && ischar(varargin{1})
gui_State.gui_Callback =str2func(varargin{1});
end
ifnargout
[varargout{1:nargout}] =gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code- DO NOT EDIT
% --- Executes justbefore test is made visible.
functiontest_OpeningFcn(hObject,eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
% --- Outputs from thisfunction are returned to the command line.
functionvarargout = test_OutputFcn(hObject,eventdata, handles)
varargout{1} = handles.output;
% --- Executes on buttonpress in pushbutton1.
functionpushbutton1_Callback(hObject,eventdata, handles)
生成的M文件的结构主要由三个子函数构成:_OpeningFcn,这个函数是在GUI界面出现以前Matlab在后台运行的,GUI设计者可以在这个函数内完成数据初始化设置、GUI的界面的控制和调整等工作。_OutputFcn函数是M文件最后运行的函数,主要是为了输出运行结果。_Callback函数用于控制component的触发行为,比如说用户按下界面的按钮后,该按钮应该执行什么命令。我们这个例子设计的是按下“Close”按钮后,GUI界面关闭,因此需要在
functionpushbutton1_Callback(hObject, eventdata, handles)
后面加上:
delete(handles.figure1);
下面我们开始借助这个简单的例子,讲一讲新手在应用GUIDE时常见的三个问题:
问题一:figure Name和figure tag弄混了。
Figure Name指的是M文件和Fig文件的name,即本例中的test. Tag指的是设计GUI界面时为每个component所指定的标签,也是程序中唯一的可以识别component的名字,GUI的面板也是一个component,有自己的tag,即本例中默认的figure1.弄混figure tag和figure name的例子如下:
错误代码:
functionpushbutton1_Callback(hObject, eventdata, handles)
delete(handles.test);
当运行错误代码时,Matlab会提示找不到handles中的test变量,因为handles只是存储component的句柄,每个句柄是以tag来命名的:
??? Reference to non-existentfield 'test'.
Error in ==>test>pushbutton1_Callback at 81
delete(handles.test);
问题二:uiwait在逻辑上与uiresume不配对。
还是上面的例子,如果再增加一个功能,等用户按下“Close”按钮后,在屏幕输出“OK”,否则不输出。为实现该功能,在test_OpeningFcn的guidata语句后增加:
% UIWAIT makes test waitfor user response (see UIRESUME)
uiwait(handles.figure1);
在test_OutputFcn的varargout{1}语句后添加:
delete(handles.figure1);
将pushbutton1_Callback中的delete(handles.figure1)删除,并添加:
disp('OK');
uiresume(handles.figure1);
运行后,用户点击“Close”按钮,一切正常。可是,当用户不点击“Close”而是直接关闭窗口时,程序提示OutputFcn输出错误:
出现该错误的原因是:当用户直接关闭窗口时,所有在内存中的变量都被清楚,程序在执行到OutputFcn是已没有变量可以赋值给结构变量varargout{1}了。为了改正该错误,需要添加_CloseRequestFcn函数:
% Executes when userattempts to close figure1.
functionfigure1_CloseRequestFcn(hObject, eventdata, handles)
% hObject handle to figure1 (see GCBO)
% eventdata reserved - to be defined in a future versionof MATLAB
% handles structure with handles and user data (seeGUIDATA)
ifisequal(get(hObject,'waitstatus'),'waiting')
% TheGUI is still in UIWAIT, us UIRESUME
uiresume(hObject);
else
% TheGUI is no longer waiting, just close it
delete(hObject);
end
可是,如果直接将上述代码复制到test.m文件中,保存,运行,关闭窗口时,同样会出现上述OutputFcn输出错误,这个就涉及到下面第三个问题。
问题三:Layout Editor的设置和M文件不同步。
为解决上述问题,可打开figure1的Property Inspector,注意到CloseRequestFcn一栏,显示的是closereq,点击以下旁边的图片,变为:
这说明两者已经同步,此时可以放心的运行程序了。
转载本文请联系原作者获取授权,同时请注明本文来自刘磊科学网博客。
收藏
分享
分享到:
文本框赋值guide matlab,科学网-Matlab: 学习GUI (使用GUIDE时需注意的几个问题)-刘磊的博文...相关推荐
- 音频剪切matlab,科学网—matlab的音频处理:读取,裁剪,输出和命名 - 张智昊的博文...
网易云下架了周杰伦的几乎所有歌曲,于是尝试下载一套周杰伦的音乐全集.从微盘上下载到的音乐前面有一段奇葩的广告,长约8秒.因为广告长度一样可以轻松的裁剪处理,于是想到可以用matlab写一个简单的小程序 ...
- 主成分回归预测matlab,科学网—Matlab: princomp() 主成分分析 - 杨建功的博文
Matlab 提供了进行主成分分析的函数 princomp().由于主成分分析(principile component analysis,PCA)这个概念在不同领域(统计学.数学等)的解释差异较大, ...
- 极大似然函数 matlab,科学网—matlab实现:基于极大似然估计的混合分布参数估计(LM洪峰流量) - 曾杭的博文...
这个是无错误版~ clear; clc; load('test.mat'); test = A_pastespecial; c2 = test(1:32,:);%前半部分数据 c3 = test(33 ...
- gshhs matlab,科学网—Matlab 利用m_map加国界线 - 肖鑫的博文
首先要添加m_gshhs工具包,在private文件夹下下载好岸线数据,具体请参考m_map工具包官网 在m_gshhs.m下,告诉我们如何加入国界 function m_gshhs(resoluti ...
- shiftdim matlab,科学网—matlab函数(矩阵相关) - 黄妮妮的博文
matlab函数(矩阵相关) functions frequently used in matlab in respect of matrix Elementary matrices. zeros ...
- 邹检验 matlab,科学网—Matlab中一个很有用的函数:regionprops - 邹兴文的博文
Matlab中一个很有用的函数:regionprops 已有 6712 次阅读 2010-1-30 22:52 |个人分类:开发经验|系统分类:科研笔记| 有用的函数, regionprops Mat ...
- 微波matlab,科学网—matlab风云3号卫星微波数据读取 - 彭邦的博文
之前自己在读取风云3号数据时候,各种查资料都没有找到相关的内容,后来自己慢慢摸索终于将数据读了出来,虽然方法很笨,但是算是达到了基本效果吧.给自己记录下,也分享给大家. 中间值得注意的是我读取的是风云 ...
- html文本框自动赋值,js给文本框赋值 value与innerHTML
赋值操作: document.getElementById("testId").value="hello"; value与innerHTML的区别 上面的val ...
- 原生js赋值html,原生js文本框赋值点击文字给text文本框赋值表单提交
特效描述:文本框赋值 文本框赋值表单 表单提交. 代码结构 1. HTML代码 菜单导航 时间日期 焦点图 tab标签 jquery特效 在线客服 官网 js代码 var x=["菜单导航& ...
最新文章
- rpm包 卸载php,强制删除rpm包的方法
- android-ViewPager不能显示
- 25岁“天才少年”曹原再发一篇Nature!1个月时间内的第二篇!
- 算法基础知识(考试复习)
- 复杂场景下,如何用AI技术做地图?
- 前端开发的模块化和组件化的定义,以及两者的关系?
- 速腾聚创三维激光雷达 实现cartographer 建图复现工作(代完成)
- [宋史学习] 赵光义篡改历史
- IP-guard23个功能模块简介
- svn环境搭建 linux
- 家用路由器的相关知识和功能
- 半导体器件物理【1】量子理论扫盲——从Planck到态叠加原理
- 新员工特训营-MAG网络安全(关联转正考试:网络安全考试)
- c语言滚动字幕的原理编程,c#中通过Graphics.DrawString实现滚动字幕的原理和代码实例...
- Android开发框架汇总
- 【BZOJ4864】【BJWC2017】神秘物质 - Splay
- 我的世界联机教程java_我的世界(minecraft)联机教程
- 制作一个网页背单词系统
- 口腔医学院用学计算机吗,口腔医学专业VS计算机专业,同样高考志愿大热门,我该选择哪个?...
- 强大的Shell客户端-推荐
热门文章
- linux网络编程之用select函数实现io复用(基于TCP)引发的思考
- Android之用netcfg命令获取手机虚拟网卡tun0的信息
- linux c之用fwrite和fread实现文件的复制
- 从行驶的车上向上抛球,球真的会回到原地吗?
- 博古通今的孩子是怎么养成的?答案就在这本影响了无数中国人思想的奇书里……
- 霍金竟然亲口承认自己是个赌徒!明明失败了不止一次,“菜鸡”却成了神话!...
- 我的电脑不联网,很安全!黑客:你还有风扇呢
- 百万大奖参赛攻略 | 让程序员走向财富自由
- linux mint 用户管理,Linux Mint 新工具:将网站转变为独立的应用
- c语言md5函数 linux,Linux下C语言计算文件的md5值(长度32)