如何使用Matlab GUI Slider Trough

时间:2016-08-25 17:56:06

标签: matlab user-interface slider matlab-guide

我正试图浏览我加载到GUI中的图像。当图像加载到GUI中时,我更新了滑块参数。

图片加载“功能”的一部分

    if handles.nImages > 1
        set(handles.frameSlider,'Min',1,'Max',handles.nImages,'Value',1)
        handles.sliderStep = [1 1]/(handles.nImages - 1);
        set(handles.frameSlider,'SliderStep',handles.sliderStep)
    end

然后尝试滑过图像并且滑块箭头键工作正常但是当我这样做时拉动滑块槽不起作用。当我拉动滑块时,拉动是平滑的,没有任何逐步增加的感觉。它给了我这个错误: Subscript indices must either be real positive integers or logicals 。我认为这种情况正在发生,因为当我拉低谷时,我在允许的滑块增量之间将其设置为values,因为拉不是逐步递增的。

滑块拉动“功能”的一部分

sliderPosition = get(handles.frameSlider,'Value');
imagesc(handles.imageListPhs{indexes})

可能是什么错误?

1 个答案:

答案 0 :(得分:1)

滑块的步长仅控制用户单击箭头按钮或滑块内部时的行为方式。用户拖动它时拇指的位置不受步长控制,因此很可能返回非整数,不能用作索引。您需要使用舍入函数,例如roundceilfloorfix,将滑块值转换为对索引有效的值。

考虑以下示例:

function testcode
nA = 15;

myfig = figure('MenuBar', 'none', 'ToolBar', 'none', 'NumberTitle', 'off');

lbl(1) = uicontrol('Parent', myfig, 'Style', 'text', ...
                'Units', 'Normalized', 'Position', [0.1 0.7 0.8 0.2], ...
                'FontSize', 24, 'String', 'Selected Value:');

lbl(2) = uicontrol('Parent', myfig, 'Style', 'text', ...
                'Units', 'Normalized', 'Position', [0.1 0.4 0.8 0.2], ...
                'FontSize', 24, 'String', 'Rounded Value:');

uicontrol('Parent', myfig, 'Style', 'Slider', ...
          'Units', 'Normalized', 'Position', [0.1 0.1 0.8 0.2], ...
          'Min', 1, 'Max', nA, 'SliderStep', [1 1]/(nA - 1), 'Value', 1, ...
          'Callback', {@clbk, lbl});
end

function clbk(hObject, ~, lbl)
slider_value = get(hObject, 'Value');
slider_value_rnd = round(slider_value);

set(lbl(1), 'String', sprintf('Selected Value: %.2f\n Can I Index with this? %s', ...
    slider_value, canIindexwiththis(slider_value)));
set(lbl(2), 'String', sprintf('Rounded  Value: %.2f\n Can I Index with this? %s', ...
    slider_value_rnd, canIindexwiththis(slider_value_rnd)));

set(hObject, 'Value', slider_value_rnd);  % Snap slider to correct position
end

function [yesno] = canIindexwiththis(val)

try
    A(val) = 0;
catch
    yesno = 'No!';
    return
end
yesno = 'Yes!';
end

说明了这个过程:

yay