matlab appdesigner的簡單介紹及其表格功能的代碼分享
????今天分享一下如何在matlab appdesigner中創(chuàng)建表格并編寫代碼實(shí)現(xiàn)常用的功能,希望能幫助大家快速上手matlab appdesigner。使用appdesigner的起因是我做一個長期項(xiàng)目的時候,想著自己畢業(yè)了留給師弟,讓他們零代碼基礎(chǔ)也能立刻接手,不過寫完了發(fā)現(xiàn)還是有功能實(shí)現(xiàn)不了(悲),表格功能的實(shí)現(xiàn)前期參考來自https://www.52txr.cn/2021/matlab_table.html,后面參考的都是官方文檔了。
????首先簡單解釋一下appdesigner的基本概念,appdesigner分為設(shè)計視圖和代碼視圖,向設(shè)計視圖中拖入各種組件來設(shè)計軟件的外部界面,而在代碼視圖添加回調(diào)、函數(shù)、屬性等實(shí)現(xiàn)軟件的內(nèi)置功能。
????回調(diào):軟件對使用者在界面上的操作(如鼠標(biāo)點(diǎn)擊等)返回的響應(yīng),一次操作可以有多種響應(yīng)且響應(yīng)總是在操作之后。
????函數(shù):內(nèi)置在軟件中的功能函數(shù),對應(yīng)matlab的自定義函數(shù)。
????屬性:可以理解為C語言的全局變量,定義在代碼視圖的開頭部分,可以在各個回調(diào)中保持一致;而在回調(diào)中定義的變量則均為局部變量,在各個回調(diào)中是不同的。這意味著在不同回調(diào)中可以定義相同名稱的局部變量而互不影響(不推薦)。在這里,我先定義屬性t用于接下來暫時存放表格中的數(shù)據(jù)。
????好啦,知道以上這些,就可以開始編寫屬于自己的小軟件啦?。ó?dāng)然本文只介紹表格的不同功能和實(shí)現(xiàn):)
????1.從組件庫中拖動表格到設(shè)計視圖中,拖入后,代碼視圖中會自動生成表格相關(guān)的定義代碼。點(diǎn)擊表格,可以在右側(cè)編輯表格的外觀,當(dāng)然也在代碼視圖中使用代碼進(jìn)行編輯。本文設(shè)計的表格功能是導(dǎo)入坐標(biāo)點(diǎn)壓力值并顯示云圖,所以修改ColumnName中的值為xyz坐標(biāo)和壓力。

????2.接下來拖入需要的按鈕組件并重命名,為了提升代碼的可讀性,可以在組件瀏覽器中修改組件的變量名。

????3.右擊設(shè)計視圖中的按鈕、表格或視圖瀏覽器中的變量名添加不同回調(diào)來實(shí)現(xiàn)響應(yīng)的功能。代碼如下:
保存按鈕回調(diào)
[importfile, importpath] = uigetfile({'*.xlsx';'*.xls';'*.csv';'*.*'},'導(dǎo)入數(shù)據(jù)');
if importfile~=0 ? ? ? ?
? excelfull = strcat(importpath,importfile);
? temptable= readmatrix(excelfull);%臨時變量temptable存放原始數(shù)據(jù)
? 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
導(dǎo)出按鈕回調(diào)
[exportfile,exportpath]=uiputfile({'*.xlsx';'*.xls';'*.*'},'導(dǎo)出數(shù)據(jù)');
if exportfile~=0
? ?excelfull=strcat(exportpath,exportfile);
? ?A1D1=["坐標(biāo)x(m)","坐標(biāo)y(m)","坐標(biāo)z(m)","壓力(pa)"];
? ?writematrix(A1D1,excelfull,"Range",'A1:D1');
? ?writematrix(app.exptable.Data,excelfull,"Range",'A2');
end
%若保存csv格式,則writematrix不適用
添加一行數(shù)據(jù)按鈕回調(diào)
nr=table('Size',[1,4],'VariableTypes',{'double','double','double','double'});
app.exptable.Data=[app.exptable.Data;nr]; ? ?
app.t=app.exptable.Data; ?
刪除一行數(shù)據(jù)回調(diào)
????在創(chuàng)建該回調(diào)之前,需要創(chuàng)建一個cellselection回調(diào),用于返回鼠標(biāo)點(diǎn)擊的表格所在行列數(shù),若未點(diǎn)擊任意一行,則刪除最底下一行;為了其他回調(diào)能調(diào)用該回調(diào)返回的輸出,需要創(chuàng)建3個屬性:mouse_ind、mouse_ind2、tf,分別存放行數(shù)、列數(shù)和“選擇命令”的邏輯數(shù)。
cellselection回調(diào)代碼如下:
indices = event.Indices;
app.tf=isempty(indices);
if app.tf==0
? ?app.mouse_ind=indices(1);
? ?app.mouse_ind2=indices(2);
end
????在得到鼠標(biāo)信息后,就能夠?qū)崿F(xiàn)刪除選定行數(shù)的功能了,代碼如下:
[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
編輯表格數(shù)據(jù)回調(diào)? ??

????為了能夠編輯表格數(shù)據(jù),需要把表格列值可編輯先勾選上,然后添加Celledit回調(diào),代碼如下:
indices = event.Indices;
newdata=event.NewData;
app.exptable.Data{indices(1),indices(2)}=newdata;
app.t=app.exptable.Data;
最后對繪圖按鈕添加ButtonPushed回調(diào),加入繪制云圖功能,這個小app的代碼部分就完成啦。
