App Designer - help with syntax for referring to an array's indices

1 回表示 (過去 30 日間)
Teshan Rezel
Teshan Rezel 2021 年 3 月 10 日
コメント済み: Adam Danz 2021 年 3 月 10 日
Hi folks,
I'm trying to initialise the table values on the app designer to zero, then increment the relevant cell based on specific button clicks.
I'm doing this by making a general function ButtonPressed(), that increments the relevant index value of the array of numbers that populates the table, then having each button calling this function when pressed, but for the index relevant to it.
I'm certain that my syntax is incorrect, but I can't seem to find any documentation on this and would appreciate some help if possible!
Below are my code and a screenshot of the app.
Thanks!
methods (Access = private)
function ButtonPushed(app, index)
app.dataStructCounts(index) = app.dataStructCounts(index) +1;
app.dataStructPercentage(index) = (app.dataStructPercentage(index) / app.TotalCounts) * 100;
app.TotalCounts = (app.IncipientCounts + app.CircularCounts + app.LenticularCounts + app.RibbonCounts + app.IsotropicCounts + app.FillerCounts);
app.TotalPercentage = (app.IncipientPercentage + app.CircularPercentage + app.LenticularPercentage + app.RibbonPercentage + app.IsotropicPercentage + app.FillerPercentage);
app.UITable.Data = [app.dataStructCounts, app.dataStructPercentage];
end
end
function startupFcn(app)
app.dataStructCounts = {app.IncipientCounts; app.CircularCounts; app.LenticularCounts; app.RibbonCounts; app.IsotropicCounts; app.FillerCounts; app.ResinCounts; app.TotalCounts};
app.dataStructPercentage = {app.IncipientPercentage; app.CircularPercentage; app.LenticularPercentage; app.RibbonPercentage; app.IsotropicPercentage; app.FillerPercentage; app.ResinPercentage; app.TotalPercentage};
app.TotalCounts = (app.IncipientCounts + app.CircularCounts + app.LenticularCounts + app.RibbonCounts + app.IsotropicCounts + app.FillerCounts);
app.TotalPercentage = (app.IncipientPercentage + app.CircularPercentage + app.LenticularPercentage + app.RibbonPercentage + app.IsotropicPercentage + app.FillerPercentage);
app.UITable.Data = [app.dataStructCounts, app.dataStructPercentage];
end
function UITableCellEdit(app, event)
indices = event.Indices;
newData = event.NewData;
app.UITable.Data = [app.dataStructCounts, app.dataStructPercentage];
end
% Button pushed function: IncipientButton
function IncipientButtonPushed(app, event)
ButtonPushed(app, 1);
end
end

採用された回答

Adam Danz
Adam Danz 2021 年 3 月 10 日
編集済み: Adam Danz 2021 年 3 月 10 日
The question is mostly clear and the image is helpful. Interesting approach to align the buttons with the UITable rows - I like it. Your use of a general callback function assigned to all buttons is also well organized.
Since there are many variables in your code and we can only guess what they are, here's the general approach and you can let us know how it differs from what you're doing.
  1. The startup function should initialize the table with what appears to be 8x2 matrix of 0s (7 buttons + total). That would look like app.UITable.Data = zeros(8,2);
  2. Assuming the index input to the ButtonPushed function is the row number, you just need to gather the row of values into a 1x2 vector and assign it to the correct row.
newData = [app.dataStructCounts, app.dataStructPercentage];
app.UITable.Data(index,:) = newData;
  6 件のコメント
Teshan Rezel
Teshan Rezel 2021 年 3 月 10 日
@Adam Danz thank you, this worked a treat! I rewrote the function with a numeric array and it worked!
Adam Danz
Adam Danz 2021 年 3 月 10 日
Nice! That's an important lesson to learn, to work with numeric arrays rather than cell arrays of scalar numeric values, whenever possible.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

製品


リリース

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by