基于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
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于MATLAB GUI的K-means算法图像聚类是一种常用的图像处理技术,旨在将图像中的像素点按照相似性进行分组。以下是一个300字的中文回答: K-means算法是一种无监督的机器学习算法,常用于图像聚类任务。MATLAB是一种强大的数学计算软件,提供了图形用户界面(GUI)工具包,使得编写和运行K-means算法更加简单便捷。 要在MATLAB GUI中实现K-means图像聚类,可以按照以下步骤进行: 1. 数据准备:将要处理的图像加载到MATLAB环境中,并将其转换为数字矩阵形式表示。可以使用imread函数读取图像,并用rgb2gray函数将其转换为灰度图像。 2. 初始化:选择要聚类的像素点数量,即确定聚类中心的数量。在GUI中,可以设置一个滑动条或者编辑框来动态调整聚类中心的数量。 3. 初始化聚类中心:使用随机或者其他策略选择初始聚类中心。可以使用randperm函数从图像中随机选取K个像素点作为初始聚类中心。 4. 迭代计算:根据K-means算法的原理,对每个像素点计算其与每个聚类中心的距离,并将其分配到距离最近的聚类中心。然后,根据新的聚类结果重新计算聚类中心。 5. 结果展示:将聚类结果可视化展示出来。可以在GUI中添加一个图像显示框,将不同聚类的像素点用不同颜色标记,形成聚类分割的效果。 在MATLAB GUI中实现K-means图像聚类,可以方便地调整参数和观察结果,提供了更好的交互性和可视化效果。通过这种方式,我们可以更好地理解和分析图像数据,提取出图像中的特定模式和信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值