Hello! Is it possible to choose the values of a slider? I have a slider that define the number of points used for some FTT transformations. I would like to fix the values of the slider only to be multiples of two, so that sliding I will always chose a multiple of two.
MATLAB: Fix Values of a slider in GUI to be multiple of two
guiguideslideslider
Related Solutions
Hamad - you will have to add some code in order to discretize the slider for the case where you slide the "slider" without using the arrows. In the yourGuiName_OpeningFcn of a GUI named yourGuiName, I added the following code
function yourGuiName_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; % add a continuous value change listener
if ~isfield(handles,'hListener') handles.hListener = ... addlistener(handles.slider1,'ContinuousValueChange',@respondToContSlideCallback); end % set the slider range and step size
numSteps = 13; set(handles.slider1, 'Min', 1); set(handles.slider1, 'Max', numSteps); set(handles.slider1, 'Value', 1); set(handles.slider1, 'SliderStep', [1/(numSteps-1) , 1/(numSteps-1) ]); % save the current/last slider value
handles.lastSliderVal = get(handles.slider1,'Value'); % Update handles structure
guidata(hObject, handles);
I'm not sure if you are using the slider Callback or have created something similar to the above which is more flexible. So all we've done is to create the listener, initialized the slider, and updated the handles structure.
Now we have to define the callback, respondToContSlideCallback as
% --- Executes on slider movement.
function respondToContSlideCallback(hObject, eventdata) % hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% Hints: get(hObject,'Value') returns position of slider
% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
% first we need the handles structure which we can get from hObject
handles = guidata(hObject); % get the slider value and convert it to the nearest integer that is less
% than this value
newVal = floor(get(hObject,'Value')); % set the slider value to this integer which will be in the set {1,2,3,...,12,13}
set(hObject,'Value',newVal); % now only do something in response to the slider movement if the
% new value is different from the last slider value
if newVal ~= handles.lastSliderVal % it is different, so we have moved up or down from the previous integer
% save the new value
handles.lastSliderVal = newVal; guidata(hObject,handles); % display the current value of the slider
disp(['at slider value ' num2str(get(hObject,'Value'))]); end
Now when you run the code, you will only see the integer values being written to the Command Window whenever you use the slider arrow buttons or manually move the slider. The difference between each integer will always be one. So we ignore any "slides" in between any two consecutive integers.
Try the above and see what happens!
Yeah, because you're setting the value equal to the min every time the user tried to slide it. Remove this line to fix it:
set(handles.slider1, 'Value', sliderMin); % set to beginning of sequence
Best Answer