在 MATLAB GUI 中使用滑块

问题描述

按照 Benoit_11Use a slider in MATLAB GUI 给出的提示,我开始调整他的代码以适合我的情况。

我注意到当向量 SliderValue*(1:0.1:20).^2 修改SliderValue*(1:dt:20).^2 时,使用 dt = 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',[60 40 400 25],...
                                'Min',min(t),'Max',max(t),'SliderStep',[.01 .01],...
                                'Callback',@SliderCallback);
    handles.Edit1 = uicontrol('Style','Edit',[150 453 100 20],...
                              'String','Click on slider');
    handles.Text1 = uicontrol('Style','Text',[70 450 70 20],'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]);