今天分享一下如何在matlab appdesigner中创建表格并编写代码实现常用的功能,希望能帮助大家快速上手matlab appdesigner。使用appdesigner的起因是我做一个长期项目的时候,想着自己毕业了留给师弟,让他们零代码基础也能立刻接手,不过写完了发现还是有功能实现不了(悲),表格功能的实现前期参考来自https://www.52txr.cn/2021/matlab_table.html,后面参考的都是官方文档了。
首先简单解释一下appdesigner的基本概念,appdesigner分为设计视图和代码视图,向设计视图中拖入各种组件来设计软件的外部界面,而在代码视图添加回调、函数、属性等实现软件的内置功能。
回调:软件对使用者在界面上的操作(如鼠标点击等)返回的响应,一次操作可以有多种响应且响应总是在操作之后。
函数:内置在软件中的功能函数,对应matlab的自定义函数。
属性:可以理解为C语言的全局变量,定义在代码视图的开头部分,可以在各个回调中保持一致;而在回调中定义的变量则均为局部变量,在各个回调中是不同的。这意味着在不同回调中可以定义相同名称的局部变量而互不影响(不推荐)。在这里,我先定义属性t用于接下来暂时存放表格中的数据。
好啦,知道以上这些,就可以开始编写属于自己的小软件啦!(当然本文只介绍表格的不同功能和实现:)
1.从组件库中拖动表格到设计视图中,拖入后,代码视图中会自动生成表格相关的定义代码。点击表格,可以在右侧编辑表格的外观,当然也在代码视图中使用代码进行编辑。本文设计的表格功能是导入坐标点压力值并显示云图,所以修改ColumnName中的值为xyz坐标和压力。
1.创建表格
2.接下来拖入需要的按钮组件并重命名,为了提升代码的可读性,可以在组件浏览器中修改组件的变量名。
2.重命名 3.添加回调
3.右击设计视图中的按钮、表格或视图浏览器中的变量名添加不同回调来实现响应的功能。代码如下:
保存按钮回调
[importfile, importpath] = uigetfile({'*.xlsx';'*.xls';'*.csv';'*.*'},'导入数据');
if importfile~=0
excelfull = strcat(importpath,importfile);
temptable= readmatrix(excelfull);%临时变量temptable存放原始数据
app.t(:,1)=temptable(:,2);%赋值给属性t
app.t(:,2)=temptable(:,3);
app.t(:,3)=temptable(:,4);
app.t(:,4)=temptable(:,1);
app.exptable.Data=app.t;%赋值给表格
end
导出按钮回调
[exportfile,exportpath]=uiputfile({'*.xlsx';'*.xls';'*.*'},'导出数据');
if exportfile~=0
excelfull=strcat(exportpath,exportfile);
A1D1=["坐标x(m)","坐标y(m)","坐标z(m)","压力(pa)"];
writematrix(A1D1,excelfull,"Range",'A1:D1');
writematrix(app.exptable.Data,excelfull,"Range",'A2');
end
%若保存csv格式,则writematrix不适用
添加一行数据按钮回调
nr=table('Size',[1,4],'VariableTypes',{'double','double','double','double'});
app.exptable.Data=[app.exptable.Data;nr];
app.t=app.exptable.Data;
删除一行数据回调
在创建该回调之前,需要创建一个cellselection回调,用于返回鼠标点击的表格所在行列数,若未点击任意一行,则删除最底下一行;为了其他回调能调用该回调返回的输出,需要创建3个属性:mouse_ind、mouse_ind2、tf,分别存放行数、列数和“选择命令”的逻辑数。
cellselection回调代码如下:
indices = event.Indices;
app.tf=isempty(indices);
if app.tf==0
app.mouse_ind=indices(1);
app.mouse_ind2=indices(2);
end
在得到鼠标信息后,就能够实现删除选定行数的功能了,代码如下:
[rownum,~]=size(app.exptable.Data);
if rownum>0
if app.mouse_ind~=0
app.exptable.Data(app.mouse_ind,:)=[];
app.t=app.exptable.Data;
app.mouse_ind=0;
else
app.exptable.Data(rownum,:)=[];
end
end
编辑表格数据回调
4.勾选表格可编辑
为了能够编辑表格数据,需要把表格列值可编辑先勾选上,然后添加Celledit回调,代码如下:
indices = event.Indices;
newdata=event.NewData;
app.exptable.Data{indices(1),indices(2)}=newdata;
app.t=app.exptable.Data;
最后对绘图按钮添加ButtonPushed回调,加入绘制云图功能,这个小app的代码部分就完成啦。
5.绘图