Update slider Limits after loading data?

15 Ansichten (letzte 30 Tage)
Ian
Ian am 6 Jan. 2024
Beantwortet: Voss am 7 Jan. 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.

Akzeptierte Antwort

Voss
Voss am 7 Jan. 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)];

Weitere Antworten (1)

Ian
Ian am 7 Jan. 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.

Kategorien

Mehr zu Develop Apps Using App Designer finden Sie in Help Center und File Exchange

Produkte


Version

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by