【问题标题】:Create slider with dynamic range based on user input matlab gui根据用户输入matlab gui创建具有动态范围的滑块
【发布时间】:2015-06-02 20:51:02
【问题描述】:

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

警告:“滑块”控件的“值”不能超出“最小值”-“最大值”范围 控件在其所有参数值都有效之前不会被渲染

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

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

任何帮助将不胜感激!

谢谢

【问题讨论】:

    标签: matlab user-interface slider matlab-guide


    【解决方案1】:

    您的代码对我来说看起来不错。您似乎在末尾缺少 guidata(hObject,handles) 来更新 guidata,因此这可能是问题所在(除非它存在但您没有将其包含在上面的 sn-p 中)。

    无论如何,这里有一段代码看起来很像你的,而且运行良好。试试看,你可能会发现你的问题是什么......

    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 之后,高于滑块的当前值:

    当前值按预期更新为 6。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-26
      • 2021-08-22
      • 1970-01-01
      • 2021-08-14
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多