例如,用GUIDE创建名为ceshi的GUI程序,其m文件的主函数有如下形式。那么,打开该GUI时,它到底是怎么运行的呢?以下略作小结,欢迎大家补充

function varargout = ceshi(varargin)%运行该GUI时,程序首先从主函数的入口点开始运行即,从function varargout = ceshi(varargin)开始运行。
gui_Singleton = ;%1、gui_Singleton = 1;保证只能运行该GUI程序的一个实例,即只能打开一个窗口。gui_Singleton = 0;允许该GUI程序可以运行多个实例,即可以打开多个窗口gui_State = struct('gui_Name',%该结构描述了该GUI的状况,包括gui的名字、运行实例、初始化函数、输出函数、布局以及回调函数。
mfilename, ... % GUI的名字
'gui_Singleton', %运行实例
gui_Singleton, ...
'gui_OpeningFcn', @ceshi_OpeningFcn, ...%初始化函数
'gui_OutputFcn', %输出函数
@ceshi_OutputFcn, ...
'gui_LayoutFcn',%布局函数
[] , ...
'gui_Callback', %回调函数
[]);
%然后程序通过gui_State.gui_Callback = str2func(varargin{1});分别取得figure和包含的控件的CreateFcn回调函数,创建各个控件。
%figure和各控件创建完毕,程序会调用OpeningFcn进行初始化,然后运行OutputFcn,把figure的句柄作为输出参数输出。这时,GUI界面便在屏幕上显示出来。
if nargin && ischar(varargin{})
gui_State.gui_Callback = str2func(varargin{});
end
if nargout
[varargout{:nargout}] = gui_mainfcn(gui_State, varargin{:});
else gui_mainfcn(gui_State, varargin{:}); end

此后程序处于等待状态,等待用户的操作。程序在调用gui_mainfcn函数时,会给figure以及各控件加一个事件监听器(listener),用来监听用户对figure以及各控件的操作。例如:用户用鼠标点击一个pushbutton按钮时,程序会监听到这个时间,然后调用该按钮的回调函数pushbutton_callback,对事件进行处理。用户点击figure的关闭按钮时,会调用其CloseRequestFcn回调函数,执行关闭窗口的操作。等等

可以在主函数的singleton处设置断点,然后用stepin逐步调试,发现原来GUI调用了很多函数:

gui_mainfcn->genwarname->openfig->fileparts->ispc->filesep->fullfile->unique->intmax->dec2hex->iskeyword->fliplr->hgload->str2double->lineseries->figuretoolbarcreatfcn->usejava->char->arrayviewfun->uibuttongroup->schema->addlistener->initprintexportemplate->duidata->iscom->ishghandle->isprop->childaddedcbk->findall->...

这么多的函数,都是GUIDE内部调用的,用来创建控件,并为控件添加监听器-listener。红色字体标准的函数可能是我们比较熟悉和关心的:载入图形的句柄、创建toolbar、创建buttongroup、添加监听器-listener等等。

如果有兴趣,不妨调试一下试试,看看各个函数的m代码,会得到很多启发。

程序在主函数里调用figure及各控件的CreateFcn函数创建完各控件后,下一步的任务就是要显示figure以及各控件。这时,程序会调用其OpeningFcn函数,用户如果想初始化各控件的数值以及和figure相关联的handles结构的数值,代码就可以放在这里。注意:要调用guidata(hObject,handles);函数保存所做的修改。
在OpeningFcn函数中有一条代码:handles.output=hObject;是matlab guide自动加上的,目的是把该GUI figure的句柄当作输出参数传递出去。handles.output是matlab guide自动添加到handles结构中的变量,用来传递输出参数,我们可以修改这个变量名,如:用handles.myoutput代替,只是要和OutputFcn中的varargout{1}=handles.output;名字相对应就可以。

如果我们在OpeningFcn的最后没有调用uiwait(handles.figure1),则程序立马调用OutputFcn,并返回,这时程序的输出参数就是figure的句柄,我们可以利用这个句柄来操纵figure内的控件。例如,设置其数值等。如果我们在OpeningFcn的最后调用了uiwait(handles.figure1),则程序不会调用OutputFcn,而是等到用户完成操作,调用uiresume(handles.figure1)时才继续调用OutputFcn函数。

直到这时,程序才算执行完毕。接下来,程序会利用原先设定的监听器(listener)来监听用户的输入操作。如,按下pushbutton等。

用guide创建的GUI的整个工作过程就是这样。了解了其工作流程,我们可以在编程中灵活控制,而不用感到一头雾水了。

以上是我这段时间利用GUI编程所收获的一点心得体会,不对的地方欢迎大家指正。也欢迎大家补充。目的:共同学习,共同进步。

matlab GUI工作原理的更多相关文章

  1. SAP GUI里Screen Painter的工作原理

    我们在SAP GUI里双击一个screen编号: 单击Layout按钮可以打开Screen Painter: 这背后的工作原理是什么? 是这个RFC destination在起作用: Connecti ...

  2. Android艺术开发探索第四章——View的工作原理(上)

    这章就比较好玩了,主要介绍一下View的工作原理,还有自定义View的实现方法,在Android中,View是一个很重要的角色,简单来说,View是Android中视觉的呈现,在界面上Android提 ...

  3. zabbix监控的基础概念、工作原理及架构

    一.什么是zabbix及优缺点(对比cacti和nagios) Zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题.是一个基于WE ...

  4. 一文看懂汽车电子ECU bootloader工作原理及开发要点

    随着半导体技术的不断进步(按照摩尔定律),MCU内部集成的逻辑功能外设越来越多,存储器也越来越大.消费者对于汽车节能(经济和法规对排放的要求)型.舒适性.互联性.安全性(功能安全和信息安全)的要求越来 ...

  5. 【Appium】Appium工作原理

    参考:http://www.cnblogs.com/zhjsll/p/5698878.html 原作者写的很好,所以直接放在这里. 一.什么是Appium Appium是一个开源.跨平台的测试框架,可 ...

  6. zabbix监控的基础概念、工作原理及架构(一)

    zabbix监控的基础概念.工作原理及架构 转载于网络 一.什么是zabbix及优缺点 Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的 ...

  7. jenkins持续集成工作原理

    转载https://www.cnblogs.com/liyuanhong/p/6548925.html 片段 这里是选择Gitlab作为git server.Gitlab的功能和Github差不多,但 ...

  8. jenkins持续集成工作原理、功能、部署方式等介绍

    超详细的jenkins持续集成工作原理.功能.部署方式等介绍 原创 波波说运维 2019-08-29 00:01:00 概述 今天简单整理了一下jenkins的一些概念性内容,归纳如下: 1.概念 j ...

  9. [转载]Appium工作原理

    [Appium]Appium工作原理 2017-09-13 15:28 sophia194910 阅读(7658) 评论(0) 编辑 收藏 参考:http://www.cnblogs.com/zhjs ...

随机推荐

  1. 选中复选框,才能在文本框中输东西。button按钮已启用,

  2. Custom Settings.ini 和 bootstrap.ini 配置

    [Settings]Priority=DefaultProperties=MyCustomProperty [Default] ;SkipWizard=YES 如果跳过部署向导,则即使 SkipCap ...

  3. 远程计算机 进程/服务 启动停止(WMI)

    WMI的远程管理需要其计算机的本地管理员组权限,例:gwmi win32_computersystem -computer win08r2d #在远程计算机上启动 notepad.exe 进程invo ...

  4. ZT 9种排序

    9种排序 2012-09-19 14:58 66人阅读 评论(0) 收藏 编辑 删除 algorithmfpfilemergeintegerfloat [cpp] view plaincopy #in ...

  5. 2018 - 2019 CTU Open Contest H. Split Game 【SG函数】

    H. Split Game time limit per test 1.0 s memory limit per test 256 MB input standard input output sta ...

  6. 20145203盖泽双 《Java程序设计》第十周学习总结

    20145203盖泽双 <Java程序设计>第十周学习总结 教材学习内容总结 一.网络概述 1.网络编程就是两个或多个设备(程序)之间的数据交换. 2.识别网络上的每个设备:①IP地址②域 ...

  7. mongodb启动与运用

    在操作前需要启动mongodb数据库服务 1.首先打开dos窗口,然后选择路径到你的安装路径下的bin目录(我的路径是的D:mongo\mongodb\bin) 2.然后输入启动命令(D:mongo\ ...

  8. Service通信

    1.简介 Service通信是双向的, 它不仅可以发送消息, 同时还会有反馈. 所以service包括两部分, 一部分是请求方( Clinet) , 另一部分是应答方/服务提供方( Server) . ...

  9. http 的request和response 在servlet的应用文件下载

    一)response 我们通过浏览器访问网站的时候,处理响应的是response. 它由三部门组成:响应行.响应头.响应体 作用:往浏览器写东西. 1)响应行 格式:协议/版本  状态码 状态码说明. ...

  10. Algorithms: Design and Analysis, Part 1 - Programming Assignment #1

    自我总结: 1.编程的思维不够,虽然分析有哪些需要的函数,但是不能比较好的汇总整合 2.写代码能力,容易挫败感,经常有bug,很烦心,耐心不够好 题目: In this programming ass ...