文本框赋值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,如下图:

1419019hqik8gi9dgvjivj.png

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输出错误:

141902lzlhja3bilic7l2b.png

出现该错误的原因是:当用户直接关闭窗口时,所有在内存中的变量都被清楚,程序在执行到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,点击以下旁边的图片,变为:

141902j4htaa4ejlp2f6fa.png

这说明两者已经同步,此时可以放心的运行程序了。

转载本文请联系原作者获取授权,同时请注明本文来自刘磊科学网博客。

收藏

分享

分享到:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷 P1294 高手去散步-邻接矩阵+dfs-求无向图的一条最长路径

输入: 4 6 1 2 10 2 3 20 3 4 30 4 1 40 1 3 50 2 4 60输出: 150邻接矩阵&#xff1a; 代码如下: #include <iostream> using namespace std;int ans -1; const int N 25; int mp[N][N]; bool vis[N]; int n, m; void dfs(int u, int sum) {ans max(ans, sum);for …

论ORM框架—EntityFrameworkCore

欢迎大家阅读《朝夕Net社区技术专刊》我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为忠实读者&#xff0c;文末福利不要错过哦&#xff01;01PARTORM框架ORM&#xff08;Object Rela…

苏老师首播3小时!超500人观看!录屏!源码!PPT……你要的都在这里!

点击视频 ☝ 回顾直播现场2020年3月25日晚18&#xff1a;30&#xff0c;“盛派周三分享”首次直播交流会&#xff0c;由盛派技术团队带头人Jeffrey&#xff0c;苏震威老师主持、分享&#xff0c;主题是《SCF 框架介绍快速创建项目演示》。此次直播历时3个多小时&#xff0c;500…

[蓝桥杯][算法提高VIP]数的划分-dp

题目描述 一个正整数可以划分为多个正整数的和&#xff0c;比如n3时&#xff1a; 3&#xff1b;1&#xff0b;2&#xff1b;1&#xff0b;1&#xff0b;1&#xff1b; 共有三种划分方法。 给出一个正整数&#xff0c;问有多少种划分方法。 输入 一个正整数n 数据规模和约定 …

十问十答 GPL 许可证

GPL 是 GNUs General Public License 的缩写&#xff0c;翻译成中文叫 GNU 的通用公共许可证&#xff0c;是最受欢迎的开源许可证之一。它由理查德斯托曼&#xff08;Richard Stallman&#xff09;创建&#xff0c;目的是保护 GNU 软件免于被专有&#xff0c;是基于他「版权向左…

oracle consistent gets,oracle构建一致性读

对于实际的业务系统&#xff0c;通常有一些热点的表&#xff0c;insert和delete的量非常大&#xff0c;这个时候就会发现一些查询语句的逻辑读比较偏高&#xff0c;这时可能就是oracle在构建一致性块的进行的consistentread。下面做一个测试看下&#xff1a;第一步准备数据&…

解析“60k”大佬的19道C#面试题(上)

解析“60k”大佬的19道C#面试题&#xff08;上&#xff09;先略看题目&#xff1a;请简述 async函数的编译方式请简述 Task状态机的实现和工作机制请简述 await的作用和原理&#xff0c;并说明和 GetResult()有什么区别Task和 Thread有区别吗&#xff1f;如果有请简述区别简述 …

通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[上篇]

《200行代码&#xff0c;7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。在过去很长一段时间中&#xff0c;有很多人私信给我&#xff1a;能否按照相同的方式分析一下MVC框架的设计与实现原理&#xff0c;希望这篇文章能够满足你们的…

通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[中篇]:请求响应

《200行代码&#xff0c;7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。在过去很长一段时间中&#xff0c;有很多人私信给我&#xff1a;能否按照相同的方式分析一下MVC框架的设计与实现原理&#xff0c;希望这篇文章能够满足你们的…

洛谷 P2853 [USACO06DEC]Cow Picnic S-dfs

输入: 2 4 4 2 3 1 2 1 4 2 3 3 4输出: 2代码如下: #include <iostream> #include <vector> #include <cstring> using namespace std; const int N 1010; bool vis[N]; vector<int>v[N]; int r[N]; int mk[N];void dfs(int u) {mk[u];for (int i …

.NET Core开发实战(第34课:MediatR:轻松实现命令查询职责分离模式(CQRS))--学习笔记(上)...

34 | MediatR&#xff1a;轻松实现命令查询职责分离模式&#xff08;CQRS&#xff09;核心对象IMeditatorIRequese、IRequestIRequestHandler<in TRequest, TResponse>源码链接&#xff1a;https://github.com/witskeeper/geektime/tree/master/samples/MediatorDemo首先…

十一届蓝桥杯国赛 玩具蛇-dfs

【问题描述】 小蓝有一条玩具蛇&#xff0c;一共有 16 节&#xff0c;上面标着数字 1 至 16。每一节都是一 个正方形的形状。相邻的两节可以成直线或者成 90 度角。 小蓝还有一个 4 4 的方格盒子&#xff0c;用于存放玩具蛇&#xff0c;盒子的方格上依次标着 字母 A 到 P 共 1…

远程终端管理和检测系统

TerminalMACS(Terminal Manager And Check System)远程终端管理和检测系统本文同步更新地址&#xff1a;https://dotnet9.com/11429.html一、本系统可监控多种终端资源&#xff1a;移动端AndroidiOSPC端WindowsLinuxMac二、整个系统分为三类进程&#xff1a;被控端(Client)被控…

《ASP.NET Core 3 框架揭秘(上下册)》送书结果公告

【免费送书】.Net5实操后的我一夜未眠&#xff0c;来个大胆预测&#xff01;的送书抽奖结果已经出来了&#xff1a;这位中奖的同学尽快填写收货地址&#xff0c;4/2 日还没有完成填写将作废&#xff0c;奖品可是热门的《ASP.NET Core 3 框架揭秘&#xff08;上下册&#xff09;…

linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手

如何在linux下用QT写一个简单的串口调试助手QT5串口类在QT5以前&#xff0c;编写串口一般使用的是qextserialport类&#xff0c;但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和SerialPortInfo(串口信息类)使用方法pro中添加QT serialport工程中包含相应的头文件#incl…

当代年轻人到底怎么跨越阶层?

0最近大道理讲的有点多&#xff0c;鸡汤灌多了容易腻味&#xff0c;还容易上火。别说你们烦我&#xff0c;我自己讲的也烦&#xff0c;感觉像一个叨逼叨的老头&#xff0c;天天灌一些被90后、00后唾弃的东西。毕竟天天熬鸡汤不仅累还容易熏晕自己。很多东西吧&#xff0c;的确是…

MySQL对JSON类型UTF-8编码导致中文乱码探讨

继上文发表之后&#xff0c;结合评论意见并亲自验证最终发现是编码的问题&#xff0c;但是对于字符编码还是有点不解&#xff0c;于是乎&#xff0c;有了本文&#xff0c;我们来学习字符编码&#xff0c;在学习的过程中&#xff0c;我发现对于MySQL中JSON类型的编码导致数据中文…

互联网公司的大龄社畜

作者&#xff1a;邹溪源&#xff0c;长沙资深互联网从业者&#xff0c;架构师社区特邀嘉宾&#xff01;一某年&#xff0c;我有幸加入了一家互联网公司B公司。互联网公司无处不充满了奋斗的精神。以此为背景。二有一天&#xff0c;有同事跟我说&#xff1a;你发现没&#xff0c…

.NET Core开发实战(第34课:MediatR:轻松实现命令查询职责分离模式(CQRS))--学习笔记(下)...

34 | MediatR&#xff1a;轻松实现命令查询职责分离模式&#xff08;CQRS&#xff09;实际上我们在定义我的查询的时候&#xff0c;也可以这样定义&#xff0c;例如我们定义一个 MyOrderQuery&#xff0c;把订单的所有名称都输出出去namespace GeekTime.API.Application.Querie…

linux连接http报301解决,https下不加www的301强制跳转

不少浏览器都开始逐渐更新至只支持https的网站&#xff0c;所以很多http网站都需要添加对https的支持&#xff0c;这时就需要涉及到www和不加www的跳转问题&#xff0c;由于www和不加www使用的是不同的证书&#xff0c;所以需要做301跳转处理&#xff0c;方案如下&#xff1a;此…