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

6 Ansichten (letzte 30 Tage)
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

Akzeptierte Antwort

Adam Danz
Adam Danz am 10 Mär. 2021
Bearbeitet: Adam Danz am 10 Mär. 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 Kommentare
Teshan Rezel
Teshan Rezel am 10 Mär. 2021
@Adam Danz thank you, this worked a treat! I rewrote the function with a numeric array and it worked!
Adam Danz
Adam Danz am 10 Mär. 2021
Nice! That's an important lesson to learn, to work with numeric arrays rather than cell arrays of scalar numeric values, whenever possible.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Produkte


Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by