基于用户输入matlab gui创建具有动态范围的滑块

基于用户输入matlab gui创建具有动态范围的滑块,matlab,user-interface,slider,matlab-guide,Matlab,User Interface,Slider,Matlab Guide,嗨,我有一个关于如何解决这个问题的快速问题。基本上,我想从两个编辑文本框中获取输入,并将它们指定为滑块范围的最小值和最大值。我这样做没有问题,但一旦输入最小值,滑块就会消失,因为最小值现在高于默认滑块值,即0。我知道错误是因为该值不再在最小值和最大值的范围内,我希望通过在最小值/最大值输入文本框的回调函数中将该值更新为高于最小值来解决此问题。有没有一种方法可以将默认值更新为高于最小值,这样我就可以克服此错误并实际使用滑块 警告:“滑块”控件的“值”不能超出“最小”-“最大”范围 控件的所有参数值

嗨,我有一个关于如何解决这个问题的快速问题。基本上,我想从两个编辑文本框中获取输入,并将它们指定为滑块范围的最小值和最大值。我这样做没有问题,但一旦输入最小值,滑块就会消失,因为最小值现在高于默认滑块值,即0。我知道错误是因为该值不再在最小值和最大值的范围内,我希望通过在最小值/最大值输入文本框的回调函数中将该值更新为高于最小值来解决此问题。有没有一种方法可以将默认值更新为高于最小值,这样我就可以克服此错误并实际使用滑块

警告:“滑块”控件的“值”不能超出“最小”-“最大”范围 控件的所有参数值都有效后才会呈现

以下是我在回拨编辑框时尝试执行的操作,该编辑框获取用户输入的滑块最小值:

function input_min_Callback(hObject, eventdata, handles)

value_min=str2double(get(hObject, 'String'));
if value_min > sliderValue_default
   set(handles.Input_Transverse_Shear_Layer1, 'Value', value_min+1);
   set(handles.Input_Transverse_Shear_Layer1, 'Min', value_min);
end
任何帮助都将不胜感激


谢谢

我觉得你的代码很好。您似乎在最后缺少一个
guidata(hObject,handles)
来更新guidata,因此这可能是问题所在(除非它在那里,但您没有将其包含在上面的代码片段中)

在任何情况下,这里都有一段代码,看起来非常像您的代码,并且运行良好。试试看,这样你可能会发现你的错误

function UpdateSliderMin(~)
clc
clear
close all

%// Create GUI elements and set default slide value
hFig = figure('Position',[200 200 200 300]);

sliderValue_default = 0;

handles.Slider = uicontrol('style', 'Slider', 'Min', -5, 'Max', 10, 'Value',sliderValue_default, 'Units','normalized','position', [0.08 0.3 0.08 0.6], 'callback', @(s,e) SliderCbk);

handles.Text_min = uicontrol('Style','text','String','Min','position', [60 230 40 20]);
handles.Edit_min = uicontrol('Style','edit','String',num2str(get(handles.Slider,'min')),'position', [100 230 40 20],'Callback',@(s,e) MinCallback);

handles.Text_max = uicontrol('Style','text','String','Max','position', [60 180 40 20]);
handles.Edit_max = uicontrol('Style','edit','String',num2str(get(handles.Slider,'max')),'position', [100 180 40 20]);

handles.Text_val = uicontrol('Style','text','String','value','position', [60 130 40 20]);
handles.Edit_val = uicontrol('Style','edit','String',num2str(get(handles.Slider,'value')),'position', [100 130 40 20]);

guidata(hFig,handles)

%// Callback of the edit box for the min value
    function MinCallback

        value_min=str2double(get(handles.Edit_min, 'String'));

        if value_min > sliderValue_default
            set(handles.Slider, 'Value', value_min+1);
            set(handles.Slider, 'Min', value_min);

            set(handles.Edit_val,'String',get(handles.Slider, 'Value'));
        end

        guidata(hFig,handles)
    end

%// Slider callback. Just to check the value is updated correctly
    function SliderCbk

        CurrentValue = get(handles.Slider,'Value');
        set(handles.Edit_val,'String',num2str(CurrentValue));
        guidata(hFig,handles)
    end

end
初始GUI的屏幕截图:

将最小值设置为5(高于滑块的当前值)后:

function input_min_Callback(hObject, eventdata, handles)

value_min=str2double(get(hObject, 'String'));
if value_min > sliderValue_default
   set(handles.Input_Transverse_Shear_Layer1, 'Value', value_min+1);
   set(handles.Input_Transverse_Shear_Layer1, 'Min', value_min);
end

当前值按预期更新为6

希望有帮助