![](https://pic4.zhimg.com/80/v2-d7e476835332911d6c5f6958d167bc23_720w.jpg)
类似的留言还有很多,今天就来聊聊MATLAB的App是否会取代GUI的问题。
01. 选App还是GUI,这不是一个问题
在对比App和GUI之前,我想先聊一下App和GUI的本质。
无论是App还是GUI,他们的本质都是一样的,都是UI(User Interface用户界面)的一种。
我们日常生活中还有很多UI的例子,像电脑桌面,手机,微信小程序等等,获取信息,调用资源,控制运作的一个可视化操作界面。
关于UI设计,很多人会把UI的职能分成3类,包括界面设计,交互设计,以及用户测试。
不过在MATLAB App/GUI的开发过程中,不会分这么细,只包括界面设计和交互设计,因为用户群体有限,基本上是只是自己使用或者项目组里使用。
之所以介绍这个,是希望能够淡化大家对GUI与App转化这件事的忧虑。
GUI和App的本质是一样的,在GUI转App这件事上,大部分的交互设计是保持不变的,也就是主要功能的callback函数都是沿用的,像数据的导入导出,数据的计算处理,数据的可视化等等。
唯一的不同是在界面设计上。虽然界面设计不同,但原理总是相通的,基本的控件也都是类似的,无非就是按钮,编辑框,文本框,列表等等。
所以,如果你打算把GUI迁移到App上,不要觉得这是件难度堪比登天的事,App Designer有提供GUI转App的工具,然后在转成之后的App略微调整,差不多就能用了。
02. MathWorks为什么要开发App Designer
既然GUI和App的本质是一样的,为什么MathWorks要开发一个全新的应用程序构建平台App Designer?
对于这个问题,我引用一下MATLAB图形和应用程序构建的开发经理Chris Portal的回答:
“GUIDE和App Designer之间的主要区别在于所使用的技术。GUIDE的基础是Java Swing,甲骨文已经不再对其投入开发。虽然这个平台可以获得一些短期的胜利,但是从长远来看,不会得到新的扩展,也不允许我们为用户提供基于网络的工作流。
App Designer建立在现代的基于web的技术上,比如JavaScript、HTML和CSS,它给我们提供了一个平台,可以灵活地跟上用户的需求,并允许应用程序在web上运行。用户可以保持他们现有的基于Java的应用程序运行,并在合适的时候选择新的平台。”
摘自Loren Shure博客: https://blogs.mathworks.com/loren/2018/07/25/the-state-of-App-building-in-matlab/
其中有一个非常有意思的信息是,基于网络的工作流,MATLAB App可以在web上运行。
如果你真的非要说服我说MATLAB App才是未来的趋势,更多的控件选择说服不了我,更精致的控件设计说服不了我,更便捷的界面设计流程说服不了我,而唯独能让我心动的是,App支持web上运行,这背后的想象空间实在是太大了。
03. MATLAB App有哪些优点
前面其实已经陆陆续续聊到了App Designer的一些优点了,除了能够支持web端的运行之外,还有非常多的优点。
我很喜欢的是App Designer的启动界面,一个非常有现代感的界面设计,相比之下,GUIDE的启动界面更有些Windows98的味道。
当然一个界面的好坏不能单纯的只靠视觉感受来判断,如果仔细去看其中的内容,就会发现里面有不少现成的例子。
![](https://pic2.zhimg.com/80/v2-5ae755fccb4e488471ef740435959791_720w.jpg)
这哪还需要什么教程什么培训班啊,随便挑一个例子,拿去玩玩,调一调参数,看看都会有哪些变化,很容易就上手了。
第二个我非常喜欢的是,在这个启动界面的最上方,会有一些帖子推荐,就拿这个上面这个图来说,推荐了一篇帖子是关于HTML UI component的,当我第一次看到的时候,非常惊喜,因为那段时间我正在制作我的小程序,所以读这篇帖子的时候,是真的很兴奋。
App Designer是这几年的一个新产品,每年都在更新改善,它更像是一个藏满似曾熟悉却未知的魔术盒,每当我看到一个新的功能,不由得会感叹,卧槽,还能这么操作!
第三个非常喜欢的是,App Designer里的控件选择实在是太多了,有日期选择框,色彩选择框,HTML,树状结构,还有一些带有工业设计元素的控件,比如旋钮,指示表等。
老实说,这些控件在GUI上并不是不能实现,都是有曲线救国的办法,但还是得花些力气去实现。相比之下,App Designer里的选择就多了不少,想要实现的功能可以更多,也更便捷。
![](https://pic3.zhimg.com/80/v2-0432b7b4d7e0c7189d112101d10b9e1e_720w.jpg)
而且控件设计也非常有讲究,我对控件里的那些圆角设计毫无抵抗力,实在是太喜欢了。
![](https://pic2.zhimg.com/80/v2-2399beadf8b9fe41dfb86ce707071d75_720w.jpg)
至于参数设计方面,我就做不评论了,因为对于这种控件拖拽的制作方式,我向来不太喜欢,这些年一直是用纯脚本形式制作GUI的。
App Designer的参数设置感受如何,只能请大家自己去体会了。
不过恰恰是因为我的这个习惯,非常让我意外与惊喜的是,App的保存形式,除了mlapp之外,还可以导出为m脚本,而这个功能是GUIDE所没有的。
这个功能的出现,对于习惯通过编程制作应用的朋友来说,是非常有帮助的。可以通过拖拽控件快速搭建应用的界面框架,然后在导出m文件之后,在m文件的基础上继续优化界面的设计。
App的好处就暂时先介绍到这里,里面还有很多非常酷炫非常人性化的设计,大家可以多花些时间去体验一下。
04. MATLAB App能否取代GUI
关于取代,随着AppDesigner越来越完善,确实会有取代的情况出现,不过不是App取代GUI。
谈到这个话题之前,我希望大家清楚几个概念。
GUI是一个UI,用户交互界面,可以理解成一个产品,一个工具。
制作GUI的方式有两种,一种是大家比较熟悉的GUIDE,这种方式和App Designer很相似,是GUI的制作环境,通过将基础控件拖入到界面中实现GUI的界面设计,右键实现callback函数的定义。
![](https://pic2.zhimg.com/80/v2-e7d879996ea2c32648861a700a4bf941_720w.jpg)
另一种方式是,通过编程的方式,定义figure窗口,在窗口中定义控件,包括控件的位置,名称,颜色,调用函数等等。
![](https://pic3.zhimg.com/80/v2-872d725887d85fd1f843b57a685bddb6_720w.jpg)
回到取代这个问题上来,其实不是App取代GUI,而是App Designer取代GUIDE,是制作方式上的取代,这样的取代才有可比性,因为两种的制作方式非常相似,而APP Designer确实要比GUIDE要便捷很多。
GUIDE的界面中,MathWorks官方也是这么提醒用户的。
![](https://pic4.zhimg.com/80/v2-7289cee08e5736aeaeaa838bf707397b_720w.jpg)
如果说App Designer取代GUIDE,我双手赞成,因为几年前,我早就用编程式GUI把GUIDE取代了。
不过如果你要说App要取代GUI,从目前来看,暂时还不太可能,举一个简单的例子。
几个月前,我想把自己之前做的一个GUI工具HaoTdms改写成App。
![](https://pic3.zhimg.com/80/v2-3aa1df57c30308d61a68f02dc81e3bd6_720w.jpg)
界面的改写过程十分顺利,不过我使用的不是类,而是直接把figure改为uifigure,GUI中的按钮,编辑框,列表等等,全都替换成App中对应的控件。
当我要迁移两个小功能的时候,碰到了问题。
一个是,我在列表里选择任意一个信号之后,输入回车键,可以生成信号的图。在GUI中只需要在列表控件上定义KeyPressFcn即可。
不过在App中,列表控件是不支持KeyPressFcn的,只有整体窗口支持KeyPressFcn。
这导致的问题是,我在搜索框中输入字符之后然后回车,整个过程一直在调用整体窗口的KeyPressFcn,而回车让列表中的信号错误显示。
另一个是,GUI的Edit编辑框可以实现的一个效果是,设置Enable为inactive,然后通过ButtonDownFcn实现对编辑框的点击事件处理。
这个功能同样在App中是无法实现的。
这类的小细节问题,其实在App中还不少,好在这些细节对整体功能的影响并不严重,只是在用户友好度上会稍有影响。
也正是因为这些细节上的问题,目前我还不太愿意把GUI完全迁移到App上。
还有一个我比较介意的问题是,App在使用过程中是会有响应迟钝,大家可以对比下App和GUI在启动过程中的响应速度。
这个问题在使用过程中同样也存在,比如大家可以试一下用uisetcolor打开调色板,这个控件就是App Designer中的一个,也是肉眼可见的卡顿。
05. App和GUI,选哪个?
从我个人的观点是:
- 如果你刚开始接触工具的制作,推荐使用App Designer
- 如果你比较喜欢用控件拖拽的方式制作工具,推荐使用App Designer
- 如果你的工具复杂度不太高,使用过程中只需要基础的点击操作,推荐使用App Designer
- 如果你计划长期制作并维护这个工具,推荐使用App Designer
- 如果你需要短期内制作一个复杂度高,成熟度高的工具,推荐使用编程式GUI,目前网上的资料与问答会比App多
- 如果你对工具的用户友好度方面要求比较高,推荐使用编程式GUI,控件可操作空间更大
- 如果你手头已经有一个项目上的祖传GUI,那就继续用GUI,不一定非要迁移到App上,并不能实现100%的迁移,而且目前GUI和App使用效果都不错