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

时间:2015-06-02 20:51:02

标签: matlab user-interface slider matlab-guide

您好我有一个关于如何解决此问题的快速问题。基本上我想从两个编辑文本框中获取输入,并将它们指定为滑块范围的最小值和最大值。我没有遇到问题,但是一旦输入min,滑块就会消失,因为min现在高于默认滑块值,即0.我明白错误是因为该值不再出现最小值和最大值的范围,我想通过在最小/最大输入文本框的回调函数中将值更新为高于min来解决此问题。有没有办法可以将默认值更新为min以上,这样我就可以通过这个错误并实际使用滑块了?

警告:'滑块'控制不能具有“价值”。除了' Min' Max'范围 在所有参数值都有效之前,不会呈现控件

以下是我在回调编辑框时尝试做的事情,该编辑框获取滑块最小值的用户输入:

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

非常感谢任何帮助!

由于

1 个答案:

答案 0 :(得分:1)

您的代码对我来说很好。你最近似乎错过了一个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的屏幕截图:

enter image description here

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

enter image description here

当前值按预期更新为6.

希望有所帮助!