MATLAB(6)GUI应用介绍

article/2025/10/6 19:05:39

目录

  • GUI编辑器
  • 控件
    • 属性
    • 回调函数
  • MATLAB常见的控件
    • 普通按钮
    • 切换按钮
    • 可编辑文本
      • 字符获取
      • 字符显示
    • 复选框
    • 单选按钮
    • 弹出式菜单
    • 滑动条
    • 列表框
    • 坐标区
  • 附录
    • 各文件共享数据
      • 保存
      • 获取

GUI编辑器

       MATLAB的GUI编辑器在命令行窗口输入“guide”启动,选择模板并点击确定后创建对应的.fig文件和.m文件。创建完成后如下图所示,左侧为各类控件,右上角为完成后运行GUI。控件的属性、.m文件为函数文件,存放各个控件的相应回调函数。将左侧控件左键单击拖动即可进行摆放。此时右键单击控件即可操作控件的属性、回调函数等。

在这里插入图片描述

控件

       控件是GUI最基本的组成部分,不同控件组成的UI界面可用于交互,用户对UI界面中控件的动作,比如按下按钮,向编辑栏输入数据等,则会调用相应的回调函数,执行预先设定好的命令,进而实现交互。

       MATLAB的GUIDE中包含常见的按钮、可编辑文本等常见的控件,基本上可以满足用户对UI的设计,并且还增加了ActiveX控件(对ActiveX控件暂时不太明白怎么用)。

属性

       控件属性决定了控件的颜色、大小、显示内容等,某些控件可能会有特有的属性,控件的属性可以通过双击控件以弹出该控件的属性检查器或右键点击控件后选择“属性检查器”(UI界面可以通过双击空白区域或右键点击空白区域),左栏为属性名称,右栏为属性值。下面介绍控件常见的属性:

  1. Enable
    该属性的值与对应描述如下表所示。
属性值描述
on控件正常显示,可正常使用
off控件变暗,不可使用
inactive控件正常显示,但不可使用
  1. String
    控件显示的文本,对可编辑文本、列表框等控件比较重要。

  2. Tag
    控件特定的标签,每个控件的属性Tag的值不同,通过代码完成控件属性值的设置或读取需要通过该属性。

       控件的属性除了在设计UI界面时设置外,在代码中也可以进行属性值设置与读取,分别通过set和get函数完成,两个函数示例如下所示。

get(handles.edit_mod_id, 'String');       %注意属性String通过单引号'括起
set(handles.edit_mod_id, 'String', Str); 

       get函数用于读取相应属性的值,第1个参数用于选定控件,第2个参数指定需要读出值的属性,该函数的返回值即为相应属性的值(需要注意的是返回值类型不一,可查看MATLAB属性介绍)。

第1个参数格式为UI界面句柄.控件标签,UI界面句柄一般为handles,一般为回调函数的第3个参数,控件标签即为上述的Tag属性值。

       set函数用于设置相应属性的值,第1个参数用于选定控件,第2个参数指定属性,第3个参数为写入值。

在属性检查器,右键相应属性名称,再点击弹窗,即可查看MATLAB对该属性的介绍。

回调函数

       控件回调函数,即用户对控件进行相应操作后,后台执行的函数,不同控件具有的回调函数不同,并且除了控件外,UI界面同样有其回调函数,通过选中控件 → 右键点击 → 查看回调,再点击相应回调函数,即可在.fig文件对应的.m文件中生成相应控件的回调函数(UI界面的回调函数生成类似,通过点击空白处以选中界面)。下面介绍一下常用的回调函数(部分控件会有特有的回调函数):

  1. CallBack
        最常用的回调函数,控件进行默认操作时被调用,默认操作例如按钮按下、复选框选中、滑动条滑动等。

  2. ButtonDownFcn
        鼠标右键点击控件时被调用。

  3. CreateFcn
        在生成这个控件时被调用,该回调函数不止控件具有,整个界面同样存在,当然,整个界面的CreateFcn函数可以用对应.m文件的第2个函数xx_OpeningFcn代替,可用于界面创建后初始化相应全局变量。

  4. DeleteFcn
        类似CreateFcn,在控件被销毁(一般是整个界面被关闭时被调用)。

  5. KeyPressFcn
        当控件被选中(获得焦点)并且有按键按下时,该函数被调用,例如可编辑文本,通过键盘向其输入时会调用该函数(使用输入法输入的话好像没有调用)。

获得焦点,或者说被选中有1个很好的例子,比如打开1个记事本,在点击1个网页,此时点击键盘,输入的内容不会出现在记事本中。

MATLAB常见的控件

控件”面板“、”静态文本“无需回调函数或特殊属性,存在的作用就是单纯的显示(当然实在想加也可以加创建、销毁回调),在此不多介绍。

普通按钮

在这里插入图片描述

       控件“普通按钮”实际上就是1个按钮,通过鼠标左键单击时调用 Callback 函数,右键单击时调用 ButtonDownFcn 函数。

注意,”KeyPressFcn“这种回调函数虽然“普通按钮”这种控件也可以使用,但这个Press是指键盘按键按下,而上面两个函数是在UI界面中点击按钮。

切换按钮

在这里插入图片描述

       相比于“普通按钮”,控件“切换按钮”不会自动弹起,即点击之后会固定显示,再次点击才会恢复,与属性‘Value’的值有关,未按下时‘Value’对应属性‘Min’的值,为0。按下后变灰,‘Value’对应属性‘Max’的值,为1。

       同样的,“切换按钮”和”普通按钮“一样有callback和ButtonDownFcn两种回调函数,效果一致,左键单击调用callback函数时,自动切换属性’Value‘的值,同时切换按钮状态(每次切换状态都会调用callback),而右键单击则调用ButtonDownFcn函数,但仅此而已,不会修改属性’Value‘的值,以及切换按钮状态。

可编辑文本

       控件“可编辑文本”具有5种回调函数,但一般都不会使用,作为可编辑文本一般有两种用法:获取输入的字符、显示字符,这两者分别通过get函数和set函数操作String属性即可。

       从左侧拖动放置的“可编辑文本”,一般只有单行显示,而且固定上下居中,输入大量数据时多余数据会消失在左侧,如下图所示。

在这里插入图片描述
       若需要多行显示,可以将“可编辑文本”的属性”Max“设置为大于1的值,此时“可编辑文本”显示的数据会到最上面,并且会自动换行、添加1个滑动条,如下图所示。

在这里插入图片描述

如果需要可编辑文本中的文本左对齐的话,设置属性‘HorizontalAlignment’为left即可,运行时文本会自动向左上角对齐。

字符获取

       字符获取的意思是获取输入框的内容,相关属性为‘String’,一般使用get函数,代码如下所示,edit_mod_id为输入框空间的属性‘Tag’的值,通过该函数返回1个字符串数组(不是因为后面的’String’!)。

get(handles.edit_mod_id, 'String');

       由于获取的是字符串,因此一般需要进行转化:

  1. hex2dec(hex_str):将十六进制字符串hex_str转为十进制数,'12’变为18。
  2. char(num):将对应十进制数字num转为对应Unicode的字符,56变为’8‘。

注意,MATLAB的十六进制只能以字符串形式表示。

字符显示

       字符显示指将字符串显示在输入框中,相关属性为‘String’,一般使用set函数,代码如下所示,str为字符串变量。

set(handles.edit_mod_id, 'String', Str); 

       由于参数是字符串,因此一般需要进行转化:

  1. sprintf(‘%c’,num):将十进制数字转化为对应Unicode的字符,单引号内为%c时等效于char(num)
  2. num2str(num):将十进制数字转化为对应的字符串。123变为‘123’

       注意上面的字符显示函数为set,所以是设置字符串而不是添加字符串,添加字符串可以尝试下面的代码:

persistent str;                %设置str为静态变量,persistent作用和C语言的static类似
str=[str, '添加的字符串'];     %合并
set(handles.edit_mod_id, 'String', str); 

对应的,设置整个文件的函数都能用的变量可以用global,在每个需要用到该变量的函数都用global进行定义即可(此时只有第1次使用是定义,后面起始都是声明)。

复选框

在这里插入图片描述

       控件”复选框“重点的属性为’Value‘,代表是否被勾选,当’Value‘的值等于属性’Max‘的值时,显示被勾选。等于属性’Min‘的值时,显示不被勾选。因此同样可以通过get和set获取或设置复选框的状态。

当’Value‘的值既不等于’Max‘,也不等于’Min‘时,复选框不可见。

单选按钮

在这里插入图片描述

       控件”单选按钮“用于让用户在多个选项中选择1种。必须与‘按钮组’组合,否则作用和复选框没区别,将其放在控件”按钮组“内后,有且只有一个”单选按钮“会被选中(如果不在”按钮组“内则无该约束)。同样,单选按钮重点的属性为’Value‘,代表是否被选中,当’Value‘的值等于属性’Max‘的值时,显示被选中。等于属性’Min‘的值时,显示不被选中。

弹出式菜单

在这里插入图片描述

       控件”弹出式菜单“重点的属性在于’String‘和’Value‘,前者决定弹出可选的内容(也就是上面的选项1、2、3…),后者决定目前选中的内容(如上,此时选项5,则’Value‘的值为5)。设置代码参考如下,此时弹出相应选项,并且当前选中选项5。一般可以在界面打开时调用该段代码,也就是xx.fig对应的xx.m的第2个函数,末尾为’_OpeningFcn‘的函数中调用。

set(handles.popupmenu1, 'string', {'选项1', '选项2', '选项3', '选项4', '选项5',...'选项6', '选项7', '选项8'}, 'value', 5);  %上一行的...为续航符

       至于获取当前用户选中的选项,当然就是通过get函数获取属性’Value‘的值咯。

滑动条

在这里插入图片描述

       控件”滑动条“好像一般不会使用到,毕竟最需要的可编辑文本已经自带了。滑动条重点的属性在于’Value‘,其范围为属性’Min‘至’Max‘之间,滑动会使得属性’Value‘的值变化,在代码中可以通过set函数获取滑动条的值。

       值得一提的是滑动条的回调函数callback,拖动滑动条然后停止,callback函数会在停止时被调用,也就是说可以在这时获取属性’Value‘的值。

列表框

在这里插入图片描述

       控件”列表框“用于列举选项,给用户提供一种选择,重点的属性在于’String‘和’Value‘,’String‘属性为列表框中的内容,如果需要通过set和get函数操作,需要注意操作的是元胞数组,每个元胞都是一项内容。’Value‘属性为当前被选中的内容,从1开始。

”列表框“和”弹出式菜单“这两种控件在作用上十分相似,不过前者占用空间比较大,虽然有滑动条,但也不太方便。

在这里插入图片描述

       控件”表“的重点属性为‘Data’,顾名思义就是表格内的数据,通过get和set函数可对其进行操作,注意操作的是元胞数组(该元胞数组是整个表格的内容),每个单元格的内容又是一个元胞数组,而这个元胞数组内,包含1个字符数组,也就是单元格的内容。

       在GUIDE中,可以通过属性检查器进行表头设置,如下图所示,点击该图标后在弹出窗口的左侧可分别设置行、列的表头, 在列属性的设置中,还可以选择该列的单元格是否允许编辑(表的内容默认是不可编辑的)。

在这里插入图片描述

       表的回调函数包括CellSelectionCallback、CellEditCallback,当某个单元格被选中时调用CellSelectionCallback函数,当编辑完成(编辑后选择其它单元格或点击Enter)后调用CellEditCallback函数。

坐标区

在这里插入图片描述
       控件”坐标区“用于绘图,绘图相应的知识点可以参考MATLAB绘图一文,”坐标区“的重点属性为‘XTick’和‘YTick’,表示”坐标区“横纵轴显示的数目(如上图所示,‘XTick’值为[1x3 double array]因此显示3个数,‘YTick’为[1x6 double array]因此显示6个数)。

注意,坐标轴的范围只与绘制曲线的值有关,即MATLAB会自动进行相应调整。

       在控件”坐标区“上绘图,使用的函数同样是plot函数,当然第1个参数应选中”坐标区“这个控件,如下所示。

plot(handles.axes1, xLeft, yLeft, xRight, yRight);

附录

各文件共享数据

建议各文件共享数据使用global修饰需要共享的变量,在使用的函数内使用global,运行第1次时会进行定义,后面都是声明,指向同一个变量。

       通过setappdata和getappdata可将某个数据在各个m文件中传递:

保存

%obj为对象,UI对象的话可以查看fig文件里面各个函数第一个参数,一般好像是hObject
%name为字符串,可随意定义
%val为存储的值
setappdata(obj,name,val) 存储 val 的内容

获取

%同上,取出上次存储的值
val=getappdata(obj,name);

http://chatgpt.dhexx.cn/article/HmVAgHMo.shtml

相关文章

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

如何使用matlab设计GUI及导出 一、GUI的基础知识开始生成GUI界面回调函数Handles结构体GUI中的参数传递 二、控件介绍一、普通按钮二、可编辑文本(edit)和静态文本(text)三、单选框(radiobutton)和复选框&a…

matlabGUI入门

matlabGUI入门 前言1 基础知识1.1 函数1.2 数据类型1.3 绘图1.4 其它 2 GUIDE2.1 创建GUI界面2.2 模板选择2.3 控件2.4 对象浏览器2.5 回调函数2.6 属性检查器2.7 数据传输 前言 由窗口、菜单、图标、光标、按键、对话框和文本等各种图形对象组成的用户界面叫作图形用户界面&a…

matlab gui编程教程,matlab如何使用gui

如何在Matlab中打开GUI工具 两种方法1、输入guide回车。2、在工具栏里点击带笔形的gui。 为Matlab的GUI添加启动画面:添加启动画面,启动画面中可以添加想要添加的图像……VisualC可以实现这个功能,Matlab也可以实现,具体如下&am…

Matlab系列之GUI设计基础

Matlab系列之GUI设计基础 简介编辑界面菜单设计控件设计控件描述个人理解Matlab转译 控件属性【1】外观与行为【2】控件对象的信息【3】回调函数【4】状态信息 结束更多精彩,等你发现~ 简介 GUI即图形用户界面(Graphical User Interface),人…

BERT的get_sequence_output与get_pooled_output方法

BERT的get_sequence_output方法获取token向量是如何得到的? 通过如下方法得到,实际上获取的是encoder端最后一层编码层的特征向量。 BERT的get_pooled_output方法获取的句子向量是如何得到的? 通过如下方法得到,实际上获取的是[…

mybatis 连接池POOLED分析

mybatis提供了三种连接池的配置方式: 配置的位置:主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式。 type属性的取值: POOLED 采用传统的javax.sql.DataSource规范中的连接池,…

读论文:Pooled Contextualized Embeddings for Named Entity Recognition

最近在看命名实体识别方向的最新的paper。在这个方向&#xff0c;18年年底有一篇<contextual string embedding for sequence labeling>&#xff0c;在CoNLL03 数据集的F1值超过BERT达到了93.09。做法是弄了个预训练的character_embedding&#xff0c;用character_embedd…

pooled-jms_Hibernate隐藏的宝石:pooled-lo优化器

pooled-jms 介绍 在这篇文章中&#xff0c;我们将揭示一个序列标识符生成器&#xff0c;​​它结合了标识符分配效率和与其他外部系统的互操作性&#xff08;同时访问底层数据库系统&#xff09;。 传统上&#xff0c;有两种序列标识符策略可供选择。 序列标识符&#xff0c;…

idea__MyBatis框架08——连接池(POOLED 跟 UNPOOLED )

一、继续上一节&#xff0c;把一些不用的注释给清理掉&#xff0c;看一下我们的mybatis主配置文件&#xff0c;重点看type。 二、Type详细介绍&#xff1a; mybatis连接池提供了3种方式的配置&#xff1a; type属性就是表示采用何种连接池方式。type属性的取值&#xff1a;POOL…

PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning论文详解ECCV2020

ECCV2020 论文地址&#xff1a;https://doi.org/10.1007/978-3-030-58565_6 代码地址&#xff1a;https://github.com/arthurdouillard/incremental learning.pytorch 目录 1.贡献点 2.方法 2.1 pool类型 2.2 POD&#xff08;Pooled Outputs Distillation&#xff09;方…

mybatis数据源(JNDI、POOLED、UNPOOLED)源码详解

一、概述 二、创建 mybatis数据源的创建过程稍微有些曲折。 1. 数据源的创建过程&#xff1b; 2. mybatis支持哪些数据源&#xff0c;也就是dataSource标签的type属性可以写哪些合法的参数&#xff1f; 弄清楚这些问题&#xff0c;对mybatis的整个解析流程就清楚了&#xff0c;…

XAConnectionFactory: failed to create pooled connection - DBMS down or unreachable 的解决方法

问题描述 项目启动出现报错&#xff1a;XAConnectionFactory: failed to create pooled connection - DBMS down or unreachable? 原因分析&#xff1a; Druid连接池问题&#xff0c;当Druid与Atomikos搭配时&#xff0c;如果MySQL版本高于8.0.11则不被支持 查看数据库使用…

没有手动提交事务,Mybatis 的 POOLED 连接池炸了

错误原因&#xff1a; 事务不关&#xff0c;并且非事务交替进行 总的来说&#xff0c;就是先开启了事务连接&#xff0c;未提交或关闭&#xff0c;导致连接池连接全部占满。 此时进行一次非事务连接操作&#xff0c;但是因为此时已经没有可以空闲的连接&#xff0c;并且创建的连…

【Flink】报错 No pooled slot available and request to ResourceManager for new slot failed

文章目录 1.场景11.1 概述1.2 问题1.场景1 1.1 概述 改报错请参考:【Flink】Flink 1.9 升级 到 flink 1.12.4 报错 shaded netty4 AbstractChannel AnnotatedConnectException 错误描述 报错信息: java.util.concurrent.CompletionException:

Oracle 关于Pooled connection request timed out

发生场景&#xff1a; 系统异常卡死&#xff0c;报错&#xff1a; 通过查找日志和业务接口定位&#xff0c;是因为数据库连接池溢出导致链接不上&#xff0c;系统卡死 异常测试代码如下格式&#xff1a; 测试了一个1000次的链接&#xff0c;每次连接都持续30秒&#xff0c;链…

MyBatis POOLED连接池深入了解

往期内容&#xff0c;如下 一、MyBatis简介 二、MyBatis环境搭建 三、MyBatis入门案例 四、MyBatis自定义 五、MyBatis CRUD操作 六、Mybatis中参数和返回值的深入了解 七、MyBatis 配置文件标签 我们在实际开发中都会使用连接池&#xff0c;因为它可以减少我们获取连接所消耗的…

unpooled与pooled

unpooled每次都是重新获取一个连接&#xff0c;底层源码如下 pooled去判断有没有&#xff0c;有就拿出来用&#xff0c;没有就创建新的&#xff0c;每次用完再还回去 mybatis poolde连接池原理 先去看空闲的有没&#xff0c;有就直接用&#xff0c;没有就去活动连接池里把最老…

.NET性能优化-推荐使用Collections.Pooled

简介 性能优化就是如何在保证处理相同数量的请求情况下占用更少的资源&#xff0c;而这个资源一般就是CPU或者内存&#xff0c;当然还有操作系统IO句柄、网络流量、磁盘占用等等。但是绝大多数时候&#xff0c;我们就是在降低CPU和内存的占用率。 之前分享的内容都有一些局限性…

使用 TFDConnection 的 pooled 连接池

使用 TFDConnection 的 pooled 连接池 从开始看到这个属性&#xff0c;就一直认为他可以提供一个连接池管理功能&#xff0c; 苦于文档资料太少&#xff0c; 甚至在帮助中对该属性的使用都没有任何介绍&#xff0c;如果你搜索百度&#xff0c;也会发现基本没资料。 最后终于在…

Mybatis 连接池POOLED

1、连接池&#xff1a; 我们在实际开发中都会使用连接池。 因为它可以减少我们获取连接所消耗的时间。 2、mybatis中的连接池 在 Mybatis 中也有连接池技术&#xff0c;但是它采用的是自己的连接池技术。 在 Mybatis 的 SqlMapConfig.xml 配置文件中&#xff0c;通过来实 现 My…