matlab设计GUI可视化界面全方位解析

您所在的位置:网站首页 高考作文素材精粹语段摘抄大全图片 matlab设计GUI可视化界面全方位解析

matlab设计GUI可视化界面全方位解析

2024-07-04 09:49:12| 来源: 网络整理| 查看: 265

如何使用matlab设计GUI及导出 一、GUI的基础知识开始生成GUI界面回调函数Handles结构体GUI中的参数传递 二、控件介绍一、普通按钮二、可编辑文本(edit)和静态文本(text)三、单选框(radiobutton)和复选框(checkbox)四、弹出式菜单(popupmenu)和列表框(listbox)五、坐标区(axes) 三、多个GUI界面的交互一、打开另一个GUI二、GUI件参数的传递 结束语

一、GUI的基础知识

GUI指的是图形化用户界面,广泛用在各种程序的上位机,能够通过简单的操作和按钮就可以调用底层代码,方便我们使用和展示结果。写好了底层的代码后我们就可以制作一个GUI界面来打包和展示。

开始生成GUI界面

首先打开matlab,在命令行界面输入guide指令就可以出现以下界面,其中有四个备选项,后三个都是一些模板,大家可以自行尝试,我们主要讲空白操作: 在这里插入图片描述 生成Blank Gui后会产生一个.fig文件和一个.m文件。.m文件大家都知道,就是matlab的程序文件,在其中写文件。.fig文件是图窗文件。在我们生成一个新的GUI完毕后会生成编辑窗口,这个图窗也可以通过右键点击.fig文件在guide中打开。 在.m文件中,生成的初始部分我们都不需要修改,当我们在GUI中添加了组件后,.m文件中会生成响应的回调函数,我们只需要编辑回调函数就可以实现相应的操作。这个过程在java生成图形化界面的思想是类似的。GUI的初始文件内容如下:

function varargout = blankgui(varargin) % BLANKGUI MATLAB code for blankgui.fig % BLANKGUI, by itself, creates a new BLANKGUI or raises the existing % singleton*. % % H = BLANKGUI returns the handle to a new BLANKGUI or the handle to % the existing singleton*. % % BLANKGUI('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in BLANKGUI.M with the given input arguments. % % BLANKGUI('Property','Value',...) creates a new BLANKGUI or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before blankgui_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to blankgui_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help blankgui % Last Modified by GUIDE v2.5 02-Jun-2020 16:33:33 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @blankgui_OpeningFcn, ... 'gui_OutputFcn', @blankgui_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 % End initialization code - DO NOT EDIT % --- Executes just before blankgui is made visible. function blankgui_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to blankgui (see VARARGIN) % Choose default command line output for blankgui handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes blankgui wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = blankgui_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;

生成的代码看起来复杂,但我们只需要注意除了OpeningFcn和OutputFcn其他地方都不要修改就行了。注意,这两个函数在GUI产生的时候会先按顺序执行一遍,然后在检查你是否对控件有操作上述的两个函数是回调函数,那么回调函数是什么意思呢?

回调函数

简单介绍,在GUI设计中回调函数就是我们在界面上进行相关操作后需要执行的函数。matlab中的回调函数分为五种: 1、Callback 这是最常用的回调函数,比如一个普通按钮,当你按下时,就会调用Callback函数执行,一个文本框,当你输入内容时,就可以执行Callback中的内容,比如要检查内容是否符合格式等等。总之,对一个控件执行默认的操作,Callback就会执行。实现功能,主要就是写在Callback下,当按下这个按钮时我们就可以使matlab开始某种计算然后画图。 2、CreateFcn 在显示某个控件之前执行里面的代码,比如某个控件要有先行条件,我们可以在这里面准备好。这个回调较少使用,我也没用过。 3、DeleteFcn 在使某个控件消失或关闭之前执行的代码,比如关闭时的自动保存,关闭时的确认是否关闭,都可以放在这里面。 4、ButtonDowmFcn 指的是鼠标在这上面点一下后执行的代码。对一个普通按钮就只能按下,Callback会覆盖掉这个函数的内容。对其他的控件,这个回调很多时候也起辅助作用,毕竟对一个可编辑文本框,你点他干啥,文本框就是拿来输入内容的。 5、KeyPressFcn 当某个控件被选中获得焦点时执行的代码。什么是焦点,比如你打开两个word,你输入的字只会出现在一个word上,因为此时的焦点在这个word上。

Handles结构体

Handles结构体包含了gui中所有对象的属性,包括你建立的控件。使用tag属性来索引每个控件,比如handles.edit1指的就是这个可编辑文本框。Handles可以用来值传递,在一个function中将指存入handles,就可以在另一个function中取出这个值。你可以在后文看见很多使用handles进行值传递操作的例子。

GUI中的参数传递

在GUI的.m文件中,参数不像一个可执行文件.m一样可以随意传递,因为GUI的.m文件中是以function的形式写的,参数不能在这些function之间随意传递,现总结以下两种方法: 1、使用全局变量 在GUI打开的初始化时,我们定义好全局变量。定义在哪呢?我们刚才提到了初始化.m文件中可编辑的是什么啊?对,就是OpeningFcn和OutputFcn,当我们打开这个fig的时候OpeningFcn中的内容会自动执行,此时我们可以将初始化内容放在这个里面,就比如参数的初始化。 定义全局变量使用global x,要使用到这个变量时,需要在回调函数中再次声明global x才能使用,这件的好处是简单,但是全局变量的缺点就是一处改处处改,变量得不到保护。 2、使用guidata和handles结合的方法 如果在一个控件的回调函数中产生的参数想要传递出去可以这么写,使用这种方法末尾一定要添加guidata():

handles.X=X; handles.Y=Y; guidata(hObject, handles);

上述语句将要传出的数据存进了handles结构体中,如果要在另一处调用参数,可以这么写:

X1=handles.X; Y1=handles.Y; plot(X1,Y1)

handles结构体也包含了gui控件的所有属性,可以调用和修改。 总之,在matlab的gui中进行值传递需要有特殊的操作,以下博客给出了更多的方法:https://www.cnblogs.com/jmliao/p/5628521.html

二、控件介绍

选择blank后是如下界面: 在这里插入图片描述

一、普通按钮

在这里插入图片描述 普通按钮功能是作为触发一个事件trigger。点一下就执行Callback中的内容。双击控件我们可以进入配置界面: 在这里插入图片描述在这里插入图片描述在这里面我们可以设置回调、文字、各种属性。 我们结合其他的控件来讲button。

二、可编辑文本(edit)和静态文本(text)

在这里插入图片描述 可编辑文本是在运行时输入内容的,比如账号密码。静态文本只起显示内容作用。 我们结合button来完成一个简单的任务:当我按下button时,读取可编辑文本中的内容到静态文本中显示。

function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) txt=get(handles.edit1,'string'); set(handles.text2,'string',txt);

这里就使用了set和get函数,使用了handles结构体进行值传递,不需要在文本框的回调函数中写任何内容。在这里插入图片描述 这样我们就可以采集用户给的数据和显示了。另外,上述代码是读取字符的如果想要读取数字的话,需要使用 str2double()处理输出。

三、单选框(radiobutton)和复选框(checkbox)

在这里插入图片描述 根据笔者的观察,单选框和复选框只是外型的不同,要实现选项互斥还是得依靠回调函数代码实现。我们结合文本框来实现加法和乘法选择,复选框用发类似不再赘述。 实现两个单选框的互斥需要在各自回调函数中操作: 给出单选框回调函数内容:

function radiobutton1_Callback(hObject, eventdata, handles) % hObject handle to radiobutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) set(handles.radiobutton1,'value',1); set(handles.radiobutton2,'value',0); % Hint: get(hObject,'Value') returns toggle state of radiobutton1

一个被选中时将另一个置零。 给出button回调函数内容:

function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) if get(handles.radiobutton1,'value') option=1; elseif get(handles.radiobutton2,'value') option=0; end num1=str2double(get(handles.edit1,'string')); num2=str2double(get(handles.edit2,'string')); if option==0 num=num1+num2; else num=num1*num2; end set(handles.text2,'string',num);

结果如下: 在这里插入图片描述上述就是简单的单选框操作。

四、弹出式菜单(popupmenu)和列表框(listbox)

在这里插入图片描述 弹出式菜但都可以拿来作为选项,那我们怎么写备选项呢?在检查器中找到如下选项: 在这里插入图片描述在这里插入图片描述 按照上述格式就是选项。接下来我们完成一个显示小组组长的任务。 首先我们把一共三个小组输入弹出式菜单: 在这里插入图片描述 然后我们把执行的任务写在回调函数中,因为三个小组的组长分别是张三、李四、王五,所以我们需要建立一个字符数组然后对应过来:

function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) label=get(handles.popupmenu1,'value'); name=["张三","李四","王五"]; set(handles.text2,'string',name(label));

要注意我们从菜单中get到的是索引,不是菜单的字符内容。

五、坐标区(axes)

接下来我们讲讲坐标区,是一个非常重要的功能,用于画图。我们可以同时在一个界面上插入多个图窗,然后指定我们在哪个图窗里画图。在button的回调函数中我们可以写上之前在其他地方打包好的处理函数,或者定义数据和函数然后画图。这里我演示一个函数绘制工具,在edit框中写入函数,然后选择在哪个框中画出。首先我们设计button回调函数中读取函数名,然后根据单选框状态画出来。

function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) syms x; f=get(handles.edit1,'string'); if get(handles.radiobutton1,'value') axes(handles.axes2) else axes(handles.axes1) end ezplot(f);

在这里插入图片描述 我们只需要在文本框中输入以x为变量的函数,就可以了,更复杂的操作读者可以自行探索。回调函数的内容怎么写上文已经说明。 说到这里了,已经介绍了很多的控件操作,剩下的使用较少,希望读者自行探索。

三、多个GUI界面的交互

有些时候我们要完成的任务不会只在一个GUI中就能解决,这时需要用到多个GUI的合作和数据交互。

一、打开另一个GUI

这个功能主要通过run()实现,我这里举一个简单的例子,当我们按下button时,弹出一个确认框。 我们先新建一个GUI界面命名为confirm。在其中新建好静态文本和两个button,右下角的黑点可以调整画布大小,使其满足自己的要求: 在这里插入图片描述之后在前一个GUI的button回调函数中写下run(comfirm),此时我们再按下button时就会弹出我们这个gui界面了,用这个方法可以制作处二级的GUI界面,完成更高级的功能。 在这里插入图片描述

二、GUI件参数的传递

看完了上一部分,此时小伙伴们就要问了,我点是或否没有用啊,因为我们没有设置参数的传递,如果此时你新生成的GUI具有独立的功能,那么你完全可以想创建第一个新的那样来写这个GUI,但如果子GUI是一个界面用于设置父GUI需要的各种参数的话,那你就麻烦了。此时两个GUI产生了交互,那我们应该怎么设置呢? 我们加大上个问题的难度,先读取父GUI中的分数,然后在子GUI显示,确认后送回父GUI中显示确认的结果。 当我们在父GUI中按下button时,需要读取文本框中分数的大小,我们先在button的回调函数中写score=get(handles.edit1,'string');用于读取分数并存放在score中,此时我们需要把这个score送入我们的comfirmGUI中,使用out = comfirm(score) 注意此处的out是从子GUI中得到的返回值,score是形参,comfirm换成你自己的子GUI名。所以在button的回调中这么写:

function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) score=get(handles.edit1,'string'); out = comfirm(score) ; if out==1 set(handles.text2,'string',"已确认"); else set(handles.text2,'string',"已否认") end

现在我们关注子GUI写法。我们在父GUI中调用了comfirmGUI,此时按下button就会弹出子GUI,我之前讲了,一个GUI的初始化工作是在OpeningFcn中执行的,我们在这个地方取出父GUI传来的分数,handles.in1 = varargin{1};注意,这个varargin和即将出现的varargout是两个大小可变的数组,用来传送输入和输出。所以在子GUI的OpeningFcn中这么写:

function comfirm_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to comfirm (see VARARGIN) handles.in1 = varargin{1}; set(handles.text3,'string',['确认分数是',handles.in1,'吗?']); % Choose default command line output for comfirm % Update handles structure guidata(hObject, handles); uiwait(handles.figure1)

思路是我们得到了varargin传来的数据也就是分数后,显示出来。强调!我在第一部分的时候讲过了,OpeningFcn和OutputFcn是按顺序执行的!我们必须在末尾加上uiwait(handles.figure1)figure1是子GUI的tags,检查器中可以找到。这个语句会让程序停下不再执行OutputFcn,否则一开始输出就确定了那就不需要白费力气了。 接下来我们看button的回调函数,这个很简单:

function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) handles.out1=1; guidata(hObject, handles); uiresume(handles.figure1)

如果是被按下,则返回1并用handles传出。在button回调函数的结尾必须加上uiresume(handles.figure1)这样才能继续回到我们刚才uiwait的地方继续执行OutputFcn,我们看看它的内容:

function varargout = comfirm_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.out1; delete(handles.figure1);

varargout是用于将子GUI内的数据传出的载体,之前已经讲过了与之相对的varargin,就不再多说了。在最后我们要加上delete(handles.figure1);表示执行到这个地方关闭子GUI,其中figure1是子GUI的tags。到这个地方我们就回到了父GUI并得到了下图: 在这里插入图片描述到这个地方,多个GUI的关联和值传递就差不多了。

结束语

笔者水平有限,简单地介绍了一下matlab中GUI的各种操作,这些就像是积木一样,了解了最基本的自己通过学习和努力慢慢搭建高楼大厦就可以了。如有错误,欢迎大家指出。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭