基于MATLAB GUI的上位机软件设计学习---GUI M文件主界面

基于MATLAB GUI的上位机软件设计学习—GUI M文件主界面

最近因为负责的项目需要搭建上位机软件,作为电源监控系统的上位机软件,进行电源实时监控,并分析历史故障信息,因为后续还想做故障诊断系统以及现有系统和本项目的不完全兼容,因此萌发了使用MATLAB GUI做一个上位机软件的想法;
主要考虑使用MATLAB利于后续故障诊断系统的开发,同时QT实在不会啊,很难受有木有!仗着自己会点MATLAB,所以开始了基于MATLAB GUI制作上位机软件的过程,为了便于查找,同时方便其他苦苦挣扎的小伙伴,把学习过程作为一个系列博客发表在CSDN中。好了,话不多说,我要开始我的学习了~~~~~~~~
首先我还是知道使用

>> guide

打开一个Blank GUI界面(Tip:个人学习过程喜欢在使用中学习)
在这里插入图片描述
虽然这个界面我看的一脸懵逼,所以我就找啊找,然后通过视图–>编辑器打开了M文件编辑器。打算先瞧瞧。
看得我更懵逼了,所以就从这个空白代码学起把。
经过我一番查找资料,在《MATLAB GUI学习手记》第6章中查找到了相关介绍,搬在此,方便查找。

GUI的M文件

GUI的M伟岸,控制GUI并决定GUI对用户操作的响应。GUI运行的所有代码都在M文件中,因此搞懂M文件很重要。
M文件有一系列子函数构成,包含主函数、Opening函数、Output函数和回调函数。

function varargout = untitled(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @untitled_OpeningFcn, ...
                   'gui_OutputFcn',  @untitled_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

function untitled_OpeningFcn(hObject, eventdata, handles, varargin)
% Choose default command line output for untitled
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% --- Outputs from this function are returned to the command line.
function varargout = untitled_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

先来说说gui_Singleton = 1;
该语句主要用于指定是否只能产生一个界面。当gui_Singleton = 0;时,表示GUI可以产生多个窗口实例;当gui_Singleton = 1;时,表示GUI只能产生一个窗口实例允许GUI产生对个窗口实例,可在GUI编辑界面的菜单里选择:工具->GUI选项–>【GUI仅允许运行一个实例(单个)】的勾,此时gui_SIngleton自动更新为0(实测需要保存之后才会修改,不如M文件中进行修改)。

gui_State是一个结构体,指定了figure的Opening函数和Output函数;开始gui_Callback为空,此时创建GUI;如果输入参数个数大于1,且第一个输入参数为字符串,第二个参数为聚丙酯,则将输入的地图给参数传递给gui_State.callback,此时执行回调函数*(tip:具体作用还有待发掘)*。
(注:句柄实质上是一个指针。gui中一般都是指向控件的指针,可以得到该控件所有信息;百度查询所得

function varargout = untitled(varargin)

为主函数声明,为了偷懒没有取主函数名,使用了默认的untitled函数名,varargin为输入参数,varargout为输出参数。当创建GUI时,varargin为空;当用户触发GUI对象时,varargin为1个1*4的单元数组,第一个单元为所要执行回调函数的函数名。
e.g. 单击了Tag值为pushbutton1的pushbutton对象,此时varargin{1}=‘pushbutton1_Callback’,即为要执行的回调函数pushbutton1_Callback的函数名。第2~4个单元为该回调函数的输入参数:hObject、eventdata和handles。
hObject:当前回调函数对应的GUI对象句柄;
eventdata:附加参数;
handles:当前GUI所有数据的结构体,包含所有HUI对象的句柄和用户定义数据。
下面再说一下gui_Stata结构体参数的含义。

gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @untitled_OpeningFcn, ...
                   'gui_OutputFcn',  @untitled_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
  1. gui_Name 字段值为mfilename。mfilename函数用于M文件内部,返回当前正在运行的M文件名字;如用于命令行,返回空字符串;
  2. gui_Singleton,前文说过,用于设置是否只产生单一GUI实例;
  3. gui_OpeningFcn,字段值为挡圈GUI的OpeningFcn函数句柄;
  4. gui_OutputFcn,字段值为当前GUI的OutputFcn函数的句柄;
  5. gui_LayoutFcn,用于创建GUI实例。字段值为空时,先检查上次GUI初始化是否完成,若没有完成,则删除上一个创建的句柄并重新创建;
  6. gui_Callback,初始值为空,表示只运行OpeningFcn和gui_outputFcn,而不运行Callback.
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

用于判断是创建GUI还是执行回调函数。若输入参数至少为1个且第一个为字符串,则令结构体gui_State的字段gui_Callback的值第1个输入参数表示的回调函数;若没有输入参数,则字段gui_Callback的值为空,此时创建GUI实例。

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

用于运行GUI默认的处理函数:gui_mainfcn。该函数用于处理GUI创建、GUI布局和回调函数。当输出参数存在时,输出参数有函数gui_mainfcn返回;当输出参数不存在时,直接运行函数gui_mainfcn。

gui_mainfcn函数

函数gui_mainfcn时GUI默认的处理函数。gui_mainfcn根据gui_State和传入参数来确定是执行回调函数,还是打开GUI并运行OpeningFcn和OutputFcn。如果gui_Callback为空,那么就运行GUI,打开主窗口fig文件否则,执行gui_Callback指定的子函数。
本文对于gui_mainfcn函数不详细介绍,主要是本人懒得去研究,目前啥都不懂,为啥要自寻烦恼呢,后续有需要再去研究,这里只需要认识它,不至于看到它一脸懵逼,做到心里有数就行。
这篇文章就到这吧,去做午饭了~~~~~~~~~~~

  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值