Changing slider limit in gui

is there anyway i could get the slider to update the limit to the image count Ct?
It seems that the app.Slider.Limits only accepts numerical values - at the moment it is set at 2. How can in incorperate the .Count function into the slider limit so the limit automatically updates with the value of .Count should i decide to import another file with a different .Count value?
How can I add a listener function here also?
Imported imageSet code
% Button pushed function: LoadImageButton
function LoadImageButtonPushed(app, event)
global Ct
imgSetVector = imageSet(uigetdir(''),'recursive');
Z = read(imgSetVector,1);
Ct = imgSetVector.Count;
imshow(Z,'Parent',app.UIAxes)
Slider Code
app.Slider = uislider(app.UIFigure);
app.Slider.Limits = [1 2]; **
app.Slider.MajorTicks = [];
app.Slider.MajorTickLabels = {''};
app.Slider.ValueChangedFcn = createCallbackFcn(app, @SliderValueChanged, true);
app.Slider.MinorTicks = [];
app.Slider.Position = [296 36 321 3];
app.Slider.Value = 1;
Thanks!

 Accepted Answer

Try to set the slider limit after this line
Ct = imgSetVector.Count;
app.Slider.Limits(2) = Ct;

11 Comments

Thanks for the reply!
I tried modifying the code as you mentioned:
app.Slider = uislider(app.UIFigure);
app.Slider.Limits(2) = Ct;
app.Slider.MajorTicks = [];
app.Slider.MajorTickLabels = {''};
app.Slider.ValueChangedFcn = createCallbackFcn(app, @SliderValueChanged, true);
app.Slider.MinorTicks = [];
app.Slider.Position = [296 36 321 3];
app.Slider.Value = 1;
However I got the error:
Unable to perform assignment because the left and right sides have a different number of elements.
Not here. You need to assign it in LoadImageButtonPushed. So that the limits are changed when you push the button.
Do i cut out the
app.Slider.Limits(2) = Ct;
from this section or revert back to the original code (shown in the first post)?
Remain the slider code the same as in the question. Just try to change it in the callback.
Pranaya Kansakar
Pranaya Kansakar on 5 May 2020
Edited: Pranaya Kansakar on 5 May 2020
That's great - it worked!
Thanks!
Do you know if it's possible to create a listener function to the slider?
The slider has value changed and value changing callbacks. You can use that to respond to change in slider value. In app-designer. right click the slider and in callback menu, create the type of callback you want.
Hmm... the code that I edited appears to be a .m file as opposed to a .mlapp file.
How can I open the .m file in app deisgner?
Sorry i'm new to Matlab!
Right. I don't think there's any need for a listener since you know every place where it might need updating.
Pranaya Kansakar
Pranaya Kansakar on 5 May 2020
Edited: Pranaya Kansakar on 5 May 2020
Thanks everyone for bearing with me.
I guess i'm trying to say is there any way of updating the slider value without lifting the mouse click?
I guess this issue is addressed in the following link (by creating a plot that automatically responds):
However, this webpage demonstrates sliders using the "uicontrol" function instead of "app".
The valueChanging callback for uislider does not require lifting the mouse button. Read here: https://www.mathworks.com/help/releases/R2020a/matlab/ref/uislider.html#buicpgg-1_sep_shared-ValueChangingFcn.
Why are you creating the app in a script? Isn't it easier to use the app-designer?
Pranaya Kansakar
Pranaya Kansakar on 5 May 2020
Edited: Pranaya Kansakar on 5 May 2020
I didn't realise that you could use the code in app-designer as well.
I've implemented it in app-designer and it works great!
Thanks!
I guess this was a trivial issue.
I attach my interpretation of the app if anyone else in the future stumbles across the same problem.
*it's laggy...

Sign in to comment.

More Answers (0)

Categories

Find more on Interactive Control and Callbacks in Help Center and File Exchange

Products

Release

R2020a

Community Treasure Hunt

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

Start Hunting!