一个月前,写了一篇文章,是关于MATLAB 2020b发布的事
写文章前,照着Release Note玩了一晚上最新版的App Designer,当时觉得真心不错
深度体验了一个月之后,今天我想聊一聊对MATLAB App的几点感受
总的来说,MATLAB App非常赞,远超过我之前对它的刻板印象,虽然还是存在一些缺点
1.
整个App应用开发里,最让我感到惊喜的是,网格布局uigridlayout ,其实这个功能早在2018b中就发布了
之所以很喜欢这个功能,除了能够在App Designer中快速工整地布局各个控件之外,还有一个很有意思的功能是,网格的长宽可以设置成根据窗口大小自动调整尺寸,也就是大家所看到的1x,2x等等
这么处理的一个好处是,布局在网格中相应的控件,也会因此随着窗口大小的变化进行相应的位置和大小调整,如果希望控件的位置大小不随着窗口改变,只需要把网格对应的位置改成固定的像素就好
喜欢这个功能,倒不是因为GUI不能实现,只是实现起来没有App这么方便
在GUI里需要对窗口figure的SizeChangedFcn进行定义,当窗口大小改变时,对相应控件的大小进行调整,如果界面上控件特别多,同时还涉及到多层面板的时候,App网格布局的优势就很明显
而在MATLAB 2020b中,可变尺寸的想法也加入到了uitable
需要注意的是,uitable的这种可变列宽属性,只对App有效,也就是uifigure创建的窗口,而在figure创建的GUI窗口中是无效的,想要实现同样功能朋友,只能通过figure的SizeChangedFcn函数对表格的列宽进行更新
2.
在2020b的更新中,另一个比较有意思的功能是,能够通过代码的形式去控制scroll滚动的位置
关于页面滚动功能,基于figure创建的GUI界面是没有原生的这个功能,不过通过一个面板panel和一个滑动条slider组合,也是能够实现页面滑动的效果
其实早在2018b的App里,就已经加入了scrollable
在这个功能基础上可以衍生出的拓展功能其实有不少,比如一个庞大的界面上有很多操作区域,通过按钮的点击能够快速定位切换到相应的操作区域,或者也可以结合窗口keypressfcn键盘响应,用特定的按键去控制页面的滑动,等等
3.
除了前面提到的两个的更新之外,剩下的更新基本上属于,意料之中、迟早会来的更新
比如,现在的App终于可以自定义窗口图标和工具栏图标了
App现在可以实现modal置顶
App里还加入了WordWrap
按钮button和面板组panel group终于加入了Enable选项,Enable是一个设置交互开关的属性,简单的讲就是,Enable设置为off的时候,点击按钮没反应,on的时候,才能调用定义好的回调事件
这次的App Building
这么处理的好处是,在之后的App开发中,可以直接使用自定义控件,不需要在控件本体中做修改,只需要定义相关的接口参数就可以了
这次的更新还在App Designer中加入了Single Running Instance选项,勾选这个选项之后,每次运行App,都会把之前的老窗口关闭,再创建新的App窗口
用代码实现不难,delete uifigure对象就能关闭,不过用App Designer作应用开发时,这个功能确实非常必要,不然桌面上就会有关不完的窗口
App Designer这回支持控件的堆叠顺序调整,有点像图层顺序的定义,很实用
App Designer里还加入了工具栏的控件,算上之前加入的右键菜单功能,和菜单栏,现在的组件库算是该有的全都有了
最后介绍一个非常酷炫的功能是,MATLAB 2020b中的比较功能,现在已经可以支持mlapp文件的对比和合并了
App的对比我倒一点也不奇怪,Simulink模型
不过新增的合并功能,我只能大喊一句,爱了
因为在工具开发过程中,存在版本更新问题,不同的版本有不同的功能,而对比合并就很好的解决了不同工具版本之间功能合并的问题
有点尴尬的是,mlapp的合并不支持控件定义部分,也就是大家在代码视图中看到的灰色部分,只能合并回调事件的函数
不过,如果大家不是选择用App Desinger来开发应用,而是直接通过写代码的形式创建uifigure工具,对比合并的功能就没有任何限制
还有一些小更新,我就不在文章里介绍了,大家可以照着App Building的Release Note在MATLAB里玩一下
4.
聊几点自己对MATLAB App Building的想法吧
就像文章最开头讲的,就目前MATLAB App来说,已经远远超过我曾经的预期
作为用户而言,如果要在GUI和App之间作选择,现在我肯定会选择App来作日常的工具开发
丰富的控件,非常舒适的界面设计,再加上极致的开发效率,无论是工程师还是科研人员,App绝对是最好的一个选择,就像产品经理群里的一个朋友"吐槽"的,App Designer非常不错,缺点就是会让自己变懒
不过,作为工具开发人员来说,我目前还是没办法从GUI向App过渡
最主要的困扰是工具兼容问题,我用MATLAB 2020b开发的App应用,如果用户用老版本的MATLAB运行工具,肯定是会报错的,但如果因此需要我用低版本的MATLAB去配合用户的话,那今天所有的测评都失去了原有的意义
再一个无法回避的问题是,App在鼠标键盘交互方面做的实在是太烂了,目前只支持uifigure窗口的鼠标键盘交互,一旦窗口失去焦点,停留在任何一个控件上,所有的keypress、buttondown就都不起作用了
不过我相信,这个问题也只是暂时的,鼠标键盘交互的功能迟早会来的
所以,对于GUI和App这道选择题,我个人建议是:
如果大家开发的工具只是给自己用,或者只是周围小范围用户使用,没有任何版本兼容问题的话,强烈大家把MATLAB升级到最新版本,用App制作工具
如果一些朋友跟我一样,平时喜欢开发工具分享给大范围的用户群体的话,目前建议还是使用GUI开发工具
以上就是今天关于新版MATLAB App Building的一个简短的分享
如果你也对MATLAB感兴趣,欢迎关注我的微信公众号“打浦桥程序员”
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...