MATLAB(6)GUI应用介绍

2023-11-05

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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB(6)GUI应用介绍 的相关文章

  • MATLAB 中时间戳过滤器的优化 - 处理非常大的数据集

    我正在 MATLAB 中编写一个程序 必须使用 MATLAB 并且不能真正使用 MEX 来过滤大量数据 我需要实现的过滤器之一要求我将时间戳向量与其他时间戳不会出现的已知 不良 时间列表进行比较 一个典型的时间戳向量有大约 2 000 00
  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • Matlab:保存后翻转图例顺序和图例重叠图

    我正在尝试根据以下内容反转我的图例条目顺序matlab条形图中图例颜色的逆序 https stackoverflow com questions 31178005 reverse ordering of legend colors in m
  • Matlab 字段名索引[重复]

    这个问题在这里已经有答案了 所以我有一个包含多个表的元胞数组 我试图访问表的第一个列名称 c table1 table2 table3 以下两行都给了我错误 fieldnames c 1 1 fieldnames c 1 1 Error i
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • 有没有办法在matlab中进行隐式微分

    我经常使用 matlab 来帮助我解决数学问题 现在我正在寻找一种在 matlab 中进行隐式微分的方法 例如 我想区分y 3 sin x cos y exp x 0关于dy dx 我知道如何使用数学方法通常做到这一点 但我一直在努力寻找使
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得
  • MATLAB 中的霍夫变换

    有谁知道如何使用霍夫变换来检测二值图像中最强的线 A zeros 7 7 A 6 10 18 24 36 38 41 1 使用 rho theta 格式 其中 theta 以 45 为步长 从 45 到 90 以及如何在 MATLAB 中显
  • 检测数据集中线性行为的算法

    我已经发布了一个关于对数据集的一部分进行多项式拟合的算法 https stackoverflow com q 17595932 2320757前一段时间收到一些建议去做我想做的事 但我现在面临另一个问题 我尝试应用答案中建议的想法 我的目标
  • Matlab Builder JA - 将 Matlab 编译成 Java jar - 免费版本?

    请记住 我对 Matlab 一无所知 Matlab Builder JA 允许开发人员构建 Matlab 应用程序并将其导出到 Java jar 中 太棒了 我只需要生成一个 jar 然后就可以从其他 java 代码中使用它 有谁知道单罐包
  • 快速有效地计算已知特征值的特征向量

    我的问题的简短版本 计算矩阵特征向量的最佳方法是什么A 如果我们已经知道属于特征向量的特征值呢 更长的解释 我有一个很大的随机矩阵A由于它是随机的 因此具有非负左特征向量x 这样A Tx x 我正在寻找快速有效的方法来数值计算这个向量 最好
  • MATLAB 列含义的内存分析

    我正在使用 MATLAB 配置文件来使用命令观察内存 profile memory on profile clear my code profile report and i got this table 1 我想问一下什么意思 已分配内存
  • 从动态 Java 类路径导入 Java 类时出现 Matlab 编译器 MCC 错误

    我怎样才能得到mcc识别来自用户提供的 Java 库的导入 还是简单地忽略无法解析的导入 我有一个使用 Matlab 编译器构建的 Matlab 代码库 但构建正在中断 因为mcc遇到的时候会报错importMatlab 动态类路径上的 J
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan

随机推荐

  • 服务器怎么清空系统盘,服务器怎么清空数据

    服务器怎么清空数据 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 无法看到 Windows 实例数据盘怎么办 磁盘挂载至
  • IPFS方得社区周欢:web3.0时代的分布式存储畅想

    链茶访是链茶馆新开辟的区块链项目报道专栏 每周会对一个项目团队进行专访 链茶馆将挖掘不同项目的闪光点 讲述区块链开发者的创业故事 为各位区块链同侪提供最新的项目资讯与行业动向 链茶馆今天采访了IPFS方得社区创始人周欢 该社区目前有4万用户
  • unity 常用的设计模式

    一 单例模式 在我们的整个游戏生命周期当中 有很多对象从始至终有且只有一个 这个唯一的实例只需要生成一次 并且直到游戏结束才需要销毁 单例模式一般应用于管理器类 或者是一些需要持久化存在的对象 优点 写起来很方便 调用方便 缺点 容易形成依
  • 深度学习3D可视化工具——Zetane Engine

    神经网络在工作的时候 里面到底是什么样 为了能透视这个 AI黑箱 中的过程 加拿大蒙特利尔一家公司开发一个3D可视化工具Zetane Engine 只需要上传一个模型 Zetane Engine就可以巡视整个神经网络 并且还可以放大网络中的
  • React-Router实战:路由传参(正则表达式)

    首先我们先做个路由普通传参的例子 一 准备工作 1 目录结构 index js components App gt App js Home gt Home js About gt About js News gt News js 2 源码
  • Qt常用命令和pro参数

    Qt常用工具 命令行指令 位于 C Qt5 7 1 5 7 msvc2015 64 bin 命令 功能 assistant 帮助文档 designer 设计器 linguist 翻译工具 lupdate 提取翻译字符串和生成ts文件 lre
  • logback不输出至文件_Logback日志使用详解

    Logback是由log4j创始人设计的一个开源日志组件 概述 Logback建立于三个主要类之上 日志记录器 Logger 输出端 Appender 和日志格式化器 Layout 这三种组件协同工作 使开发者可以按照消息类型和级别来记录消
  • caffe 红绿灯识别

    coding utf 8 加载必要的库 import numpy as np import sys os 设置当前目录 caffe root home ubuntu caffe sys path insert 0 caffe root py
  • Report, 20150402, Formulas on Entropy, Part I

    Section 1 Papoulis s Formula Lemma 1 If the random variables y 1 ldots y n are the linear combination of random variable
  • Artifactory Maven 使用教程

    Maven 仓库使用 修改 Maven 配置文件 选择左侧 Artifacts 选择自己需要上传的 Maven 仓库 点击Set Me Up 在弹出的设置框中点击 点击下载生成的文件 将生成的文件放到此目录下 或者你自己的 Maven 目录
  • 线性回归模型

    线性回归是最简单的机器学习模型 也是最基础最重要的分析工具 易于实现 本文将将简单讲述线性回归 最小二乘法和梯度下降三种算法 目录 1 线性回归方程 OLS 2 最小二乘法 OLS 3 梯度下降 GD 3 1超参数 的选择 3 2局部最小值
  • Android使用OpenCV来实现bitmap独立设置每个圆角

    Android使用OpenCV来实现bitmap独立设置每个圆角 关于opencv集成请参考我的其他文章 这里方便起见已经封装成java方法供大家调用 代码如下 public static Bitmap drawCircleRadius i
  • 打乱1-100的个数字的顺序

    package test import java util Random public class Test2 public static void swap int a int i int j if a null a length 0 i
  • Weex页面的编写——Weex的学习之路(六)

    通过前几博客我们把weex的内置组件都学习完了 组件的单独使用想必都可以了 那么 这次我们来做weex实际页面的编写 见证一下 一套代码在Android Ios和H5上使用 在weex官网推荐我们使用Weex Studio作为编译器 其实这
  • Unity 3D作业二:离散仿真引擎基础

    前言 中山大学中山大学数据科学与计算机学院3D游戏课程学习记录博客 简答题 1 解释游戏对象 GameObjects 和资源 Assets 的区别与联系 游戏对象 出现在游戏场景中 充当游戏的组件 游戏对象不做任何事情 需要特殊属性才能成为
  • Xcode Executable Not Found

    问题 Xcode编译项目报Executable Not Found的错误 Details Details Executable Not Found Domain DVTMachOErrorDomain Code 5 Recovery Sug
  • Rust 删除排序数组中的重复项

    力扣https leetcode cn com problems remove duplicates from sorted array 参考代码和注释 fn main let mut v Vec
  • Linux下Elasticsearch离线安装

    先去下载离线安装包 我这里是7 10 0 Past Releases of Elastic Stack Software Elastic 上传到 usr local下 解压 tar zxvf elasticsearch 7 10 0 lin
  • 【MATLAB】MATLAB打开后,提示内部崩溃,直接闪退关闭——解决方法

    问题描述 在第一次安装MATLAB软件时 正常使用 过了一段时间后 突然发现在命令行可以正常使用 但运行编译文件里的程序便会报 MathWorks 崩溃的错误 提示MATLAB遇到了内部问题 需要关闭 结果MATLAB自己闪退结束 解决方法
  • MATLAB(6)GUI应用介绍

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