Update slider Limits after loading data?

16 visualizzazioni (ultimi 30 giorni)
Ian
Ian il 6 Gen 2024
Risposto: Voss il 7 Gen 2024
I am using app designer and I created a slider called "FrameSelect".
The function called just before returns numFrames which I store to the app's properties. The line only works if I hard code the limits. How do I update the limits of this slider?
function OpenMenuSelected(app, event)
[file, path] = uigetfile('*.jpg;*.seq',"Select `.seq` file for analysis");
[app.imageSequence, app.minTemp, app.maxTemp, app.numFrames, app.frameRate] = load_image_sequence(app, strcat(path,file));
app.numFrames
app.FrameSelect.Value = 1;
limits = [1 app.numFrames]
app.FrameSelect.Limits = limits;
app.FrameSelect.MajorTicks = 1:15:app.numFrames;
notify(app.FrameSelect, 'ValueChanged');
end
'Limits' must be a 1-by-2 array of real finite numbers that are increasing.
limits =
1×2 int32 row vector
1 317
And yes, numFrames is an int32 value between [200, 1500] after the load_image call.
When I hard code in a value, there is no error.

Risposta accettata

Voss
Voss il 7 Gen 2024
MATLAB doesn't appear to allow the Limits property of a uislider to take on int32 values, at least in R2016b.
So it's worth a shot to try casting the value to double before using it in Limits:
app.FrameSelect.Limits = [1 double(app.numFrames)];

Più risposte (1)

Ian
Ian il 7 Gen 2024
I created a min reproducable example (min_example.mlapp) that has no issues updating the sliders limits, so there must a problem with how the dll I am using is interfaced with Matlab.
In my code doing the following worked.
function OpenMenuSelected(app, event)
[file, path] = uigetfile('*.jpg;*.seq',"Select `.seq` file for analysis");
[app.imageSequence, app.minTemp, app.maxTemp, app.numFrames, app.frameRate] = load_image_sequence(app, strcat(path,file));
x = int2str(app.numFrames);
y = str2num(x);
UpdateSlider(app, y);
end
function UpdateSlider(app, maxFrame)
app.FrameSelect.Limits = [1 maxFrame];
app.FrameSelect.MajorTicks = 1:15:app.numFrames;
app.FrameSelect.Value = 1;
UpdateImage(app, 1);
end
I am going to change my load function to calculate the number of frames instead of using the dll's functions.

Categorie

Scopri di più su Develop Apps Using App Designer in Help Center e File Exchange

Prodotti


Release

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by