MATLAB Answers

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

28 views (last 30 days)
Teshan Rezel
Teshan Rezel on 10 Mar 2021
Commented: Adam Danz on 10 Mar 2021
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

Accepted Answer

Adam Danz
Adam Danz on 10 Mar 2021
Edited: Adam Danz on 10 Mar 2021
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 Comments
Adam Danz
Adam Danz on 10 Mar 2021
Nice! That's an important lesson to learn, to work with numeric arrays rather than cell arrays of scalar numeric values, whenever possible.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!