欢迎光临散文网 会员登陆 & 注册

matlab appdesigner的简单介绍及其表格功能的代码分享

2023-07-04 22:23 作者:清歌的辣条  | 我要投稿

    今天分享一下如何在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.绘图


matlab appdesigner的简单介绍及其表格功能的代码分享的评论 (共 条)

分享到微博请遵守国家法律