在 MATLAB GUI 中使用滑块

Using a slider in MATLAB GUI

根据 Benoit_11 in Use a slider in MATLAB GUI 给出的提示,我开始调整他的代码以适应我的情况。

我注意到当向量 SliderValue*(1:0.1:20).^2 修改为 SliderValue*(1:dt:20).^2dt = 0.1 时,绘图不显示任何内容。这是必需的,因为我想使用由变量定义的表达式。

第二个问题:如何手动定义坐标轴范围?

我的代码:

%function GUI_slider

    % GUI Controls
    
    dt = 0.1;
    t = 0:0.1:100;
    
    handles.figure = figure('Position', [100 100 1000 500], 'Units', 'Pixels');
    handles.axes1 = axes('Units', 'Pixels', 'Position', [60, 120, 900, 300]);
    handles.Slider1 = uicontrol('Style', 'slider', 'Position', [60 40 400 25], ...
                                'Min', min(t), 'Max', max(t), 'SliderStep', [.01 .01], ...
                                'Callback', @SliderCallback);
    handles.Edit1 = uicontrol('Style', 'Edit', 'Position', [150 453 100 20], ...
                              'String', 'Click on slider');
    handles.Text1 = uicontrol('Style', 'Text', 'Position', [70 450 70 20], ...
                              'String', 'Slider Value:');
    handles.xrange = 1:dt:20;           %// Use to generate dummy data to plot
    guidata(handles.figure, handles);   %// Update the handles structure

    function SliderCallback(~,~)        %// This is the slider callback, executed when you release  it or press the arrows at each extremity. 

        handles = guidata(gcf);

        SliderValue = get(handles.Slider1, 'Value');
        set(handles.Edit1, 'String', num2str(SliderValue));

        plot(handles.xrange, SliderValue*(1:0.1:20).^2, 'Parent', handles.axes1);

    end
%end

我应该更正什么才能拥有它运行?

问题是你没有将 dt 传递给内部 SliderCallback 函数,所以它不知道 dt 是什么(你实际上应该得到一个错误提示你那个)。如果将 dt 添加到函数定义

中,它应该可以工作
function SliderCallback(~,~,dt)

正如 Cris Luengo 指出的那样,如果取消注释第一行 (%function GUI_slider ) 和最后一行 (%end),dt 将被视为所有子项的全局变量主函数内的函数(GUI_slider),因此,dt 可在子函数 SliderCallback(~,~) 内访问,并且您可以 运行 使用 SliderValue*(1:dt:20).^2 的代码。

第二个问题,使用函数axis可以手动设置坐标轴范围:

axis([x_min, x_man, y_min, y_max]);

set(gca, 'xlim', [x_min, x_max]);
set(gca, 'ylim', [y_min, y_max]);