最近也是在研究MATLAB App Designer,开这样的一个系列主要是为了记录我在研究App Designer时遇到的一部分问题的解决,和一部分有趣的想法,每一篇文章会展示如何将一个项目mlapp化。
mlapp化的大部分都是以前做的小项目,因此各个组件的属性便可以直接复制,这一部分不详细解说,以下是将像素化程序使用App Designer编写过程中可能会遇到的问题。
系列文章目录:

  • MATLAB 手把手带你制作第一个APP designer程序(电子词典)
  • MATLAB App Designer入门实战(一)
  • MATLAB App Designer入门实战(二)
  • MATLAB App Designer入门实战(三)
  • MATLAB App Designer 特别篇:RGB颜色提取器

入门实战第一弹——像素画绘制App

目录

  • 1.如何在App启动时,让坐标区显示图像
  • 2.如何在App启动时,为变量赋值,如何设置全局变量。
  • 3.如何创建和使用函数
  • 4.如何判读鼠标是否点击坐标区,如何获得鼠标在坐标区内位置
  • 5.如何在同一坐标区绘制多个图像
  • 6.如何不显示UIAxes的工具栏

1.如何在App启动时,让坐标区显示图像

如图所示,程序刚启动红框的位置内就已经有一个调色板,

如果在App Designer内编程,这个图片我们在这个坐标区域自动创建的时候没办法加一个这样的图像,因为:
灰色区域无法手动修改

属性检查器没有添加图像的属性

这时候就需要我们的startupFcn回调函数,这个函数是,在所有自动创建元件创建完后会自动调用一次,创建方法为:


之后便可以使用imshow plot scatter等函数在startupFcn回调函数内为特定坐标区域绘制图像,这些函数对于UIAxes的使用方法详见Mathworks,这里列举一部分:

plot:
plot(app.UIAxes,X,Y)
imshow:
imshow(Pic,‘Parent’,app.UIAxes)

Mathwork这部分内容链接:在 App 设计工具中显示图形

2.如何在App启动时,为变量赋值,如何设置全局变量。

要在App启动时为某些变量设置初值,依旧需要用到startupFcn回调函数,比如我希望程序一开始,初始颜色为蓝色,就可以:

但如果像图中这样直接设置数值,只能在startupFcn一个函数内使用,也就是说他是一个局部变量,无法跨函数使用,我们是想设置一个初值,如果设置了之后其他函数不能用那肯定不行,这时候我们需要给app添加属性,具体方法如下:

通过点击上面两个按钮我们发现,此时代码部分多了几行:

这里的Property只是一个示例,完全可以改成其他名字:

这时候我们再看之前startupFcn内的代码提示:

使用app.presentColor引用此属性,这时候在程序的任何地方都可以通过app.presentColor改变取值或者调用,例如(赋值):

分析
我对app以及其属性的理解是,这里面这个小写的app,在每个函数都会被作为参数传入,有点类似python中的this,我们可以为其增添属性,既然app在每个函数内都能引用,那么其属性的使用过程有点类似与全局变量的使用。
多个属性创建:
通过换行分隔创建多个属性:

通过’,‘及’;'分隔创建多个变量

3.如何创建和使用函数

像素画程序涉及到了十六进制码向RGB颜色的转换,我们因此需要创建互相转化用到的相应函数,创建方法如下:

通过此方法创建的函数具有以下的形式,其中的函数名,输入输出都是可以更改的:

需要注意的是,函数可以有多个参数,但是第一个参数必须是app,如果在函数中没有使用到app这个参数,则可以使用~来替换,如下图所示:

另外编写的函数在调用时,无论函数是否使用到app这个参数,无论是否使用~,app都必须作为输入参数,如下图所示,该函数使用时的第一个参数为app。

4.如何判读鼠标是否点击坐标区,如何获得鼠标在坐标区内位置

首先UIAxes是无法添加回调的,要判断鼠标是否点击坐标区,需要使用UIFigure所带的WindowButtonDownFcn回调函数,该函数的创建方式与之前提到的startupFcn回调函数相同,且回调函数会在鼠标点击程序界面时被调用,需要注意的是,UIFigure还有一个回调名为ButtonDownFcn,这两个函数是有一定差别的,对于WindowButtonDownFcn回调函数,界面上的任意点击都会调用该函数,但对于ButtonDownFcn函数来说,鼠标只要无法直接点击到UIfigure都无法调用该函数,
作用范围:
红框以内,蓝框以外
WindowButtonDownFcn:

ButtonDownFcn:

设置了WindowButtonDownFcn回调之后我们可以通过UIFigure自带的CurrentPoint属性获取鼠标最后点击的点相对于UIFigure坐标体系的位置,在通过和UIAxes位置进行比对后,确定鼠标点击点是否在UIAxes内,在哪个UIAxes内,同时UIAxes也有CurrentPoint属性,可以获得相对于UIAxes鼠标最后点击点的位置。

这里图方便用了switch函数,看不懂这个操作的可以老老实实的用if来写分支。
注:
在较新的版本中可以通过 获取uifigure的CurrentAxes属性来得到最后点击的uiaxes,只需要将代码改为(后面会提到这里为啥只用了x坐标):


这里uifigure的名字比较长不太好看,但重点是后面的CurrentAxes属性,他就是最后点击的uiaxes,具有着AXES所具有的所有属性,因此我们当然可以依据tag来区分uiaxes:

但其实各个uiaxes还有一个明显的区分就是其Position位置属性,不同做坐标区域位置是不同的,由于我们这个程序就俩uiaxes控件而且x坐标还不一样,因此我们可以只判断tempAxes的Position属性的第一个数值来判断,当然若是控件出现c轴坐标相同的情况,就需要把y轴坐标一起纳入考虑。

5.如何在同一坐标区绘制多个图像

UIAxes中绘制图像时一般会自动刷新之前的图像,想要灵活的绘制多个图像可以使用hold函数,具体使用方式参见官网,这里只介绍基础使用方法。如图所示,使用方法类似之前的hold on,hold off,不过需要对特定的UIAxes使用。

6.如何不显示UIAxes的工具栏

程序中,左侧的坐标区域是有工具栏的,但是右侧的坐标区的工具栏是被隐藏的,为的是防止工具栏妨碍取色:

这个设置可以在startupFcn内设置,如图所示:

可以通过

app.UIAxes.Toolbar.Visible=‘off’

这样的方式,对其进行隐藏


相信认真看完这篇文章的你已经有了还原该mlapp文件的能力,希望了解更多神奇操作,例如如何批量创建元件啥的请关注下一期,本期内容相关文件:
MATLAB像素画程序m文件链接:MATLAB 像素画绘制APP
MATLAB像素画程序mlapp文件链接:像素画绘制APP,pixelPicDesignApp.mlapp

MATLAB App Designer入门实战(一)相关推荐

  1. MATLAB App Designer入门实战(三)

    这期文章中的问题虽然比较少,但是综合性较强. 系列文章目录: MATLAB 手把手带你制作第一个APP designer程序(电子词典) MATLAB App Designer入门实战(一) MATL ...

  2. MATLAB App Designer入门实战(二)

    为了方便汇总,这里的目录是接着第一篇来的. 系列文章目录: MATLAB 手把手带你制作第一个APP designer程序(电子词典) MATLAB App Designer入门实战(一) MATLA ...

  3. Matlab App Designer 【03】绘制基本测试函数图像以及摸鱼听歌

    绘制基本测试函数图像以及摸鱼听歌 一.绘制基本测试函数图像 1.函数的定义与调用 2.保存图片到指定路径 3.图像回调 二.复现网易云音乐播放器 1.web网络请求API 2.try catch en ...

  4. MATLAB App Designer 特别篇:RGB颜色提取器

    在大家的要求下,我将RGB颜色提取器App化了,并做出了以下几个改进: 保留小数位数标准化 颜色格式多样化: 支持16进制码及HSV格式 数据输出标准化: 其他的用法可以看之前GUI版本的相关文章: ...

  5. 《MATLAB App Designer从入门到实践》随书源代码

    GUIDE已经被MATLAB抛弃了,你还不知道吗?App Designer才是发展的方向 目前市面上MATLAB GUI编程的书籍琳琅满目,但大多数是基于GUIDE开发的,MATLAB从2016年开始 ...

  6. MATLAB App Designer —— 手撕代码学习总结

    文章目录 MATLAB App Designer 官方文档 MATLAB App Designer 官方示例 (一) (1.1)csvread() 函数 (1.2)xlsread() 函数 (1.3) ...

  7. MATLAB App Designer GUI开发从0到1(二)

    文章目录 前言 一.开关以及旋钮 1. 左上角:旋钮 2.右上角:90度仪表 3.左下角:分档开关 4.右下角:开关 5.对旋钮微调 二.画图 1. 普通画图 2.添加小组件 三.回调函数 简单的回调 ...

  8. 基于MATLAB APP Designer 和 Python 的音视频剪辑

    简介 本软件是基于 MATLAB APP Designer 和 Python 联合编制的一款简易音视频剪辑软件,可以拿来练手MATLAB APP Designer.面向对象编程.假期空闲时和同学一起自 ...

  9. 汽车各档爬坡度曲线matlab,基于MATLAB App Designer的汽车爬坡能力建模与仿真

    1. 引言 汽车常常需要在不同区域的不同道路上行驶,尤其在山区道路上,坡陡路窄,汽车必须具有一定的爬坡能力,爬坡能力通常由最大爬坡度来衡量,最大爬坡度是汽车动力性能的重要指标之一.为此开展了基于MAT ...

最新文章

  1. 2.27 MapReduce Shuffle过程如何在Job中进行设置
  2. mysql5.6安装
  3. 新垣结衣AI换脸郭德纲 网友:换脸史上最惨的车祸现场
  4. C/C++ Socket编程Http下载的简单实现
  5. 云上持续交付实践系列1 --- java 篇
  6. 冒号在MATLAB里基本意思
  7. 6个小白也能看得懂的华为交换机命令,你学会了吗?
  8. 云服务器+Dock+搭建个人博客网站
  9. Mono.Cecil 初探(一):实现AOP
  10. java8 Stream分组求和reducing分组求最大值
  11. Kubernetes_28_Ingress服务暴露
  12. AC自动机模板(【CJOJ1435】)
  13. Nginx防止大流量攻击,限制流量访问(limit_req_zone模块)以及进行网站压力测试
  14. Linux认证考试心得:RHCE考试心得
  15. Linux效劳器装机安全快速进阶指南(6)
  16. 《写给大家看的设计书(第3版)》
  17. 读《向上管理的艺术:如何正确汇报工作》感悟
  18. 2017-8-24股票复盘
  19. ATools PySide6版本依赖包记录
  20. vue重置data数据 神器之Object.assign()

热门文章

  1. 中国长租公寓与住房租赁领域未来八大趋势和创新探讨
  2. Python 爬取妹子图02
  3. 机器学习案例:孕妇吸烟与胎儿健康
  4. 如何在飞腾平台使用4G模块拨号上网
  5. 百花齐放的国产数据库
  6. vs2008+vss2005实现代码管理
  7. 2020-02-23
  8. HLG 火影忍者之~静音
  9. 京杭大运河北线疏浚穿越黄河地形UTM平面直角坐标系分析GIS模型建立
  10. 为什么用了这么多社交软件,你还是要回家相亲