在MATLAB GUI中使用滑块

时间:2014-10-29 14:28:58

标签: matlab user-interface slider matlab-figure matlab-guide

非常简单的问题。我希望使用简单的GUI创建plot,使用滑块更改内容。我一直在使用GUI,并在面板和axies1上有一个滑块+文本。所以对于初学者我只希望滑块从1:10(没有特定的增量)开始并缩放y值(按1:10)。我已将数据导入GUI,因此省略了我的通用自动生成代码:

在Graphslide_OpeningFcn

handles.OutAirTemp = OutAirTemp;
handles.SupAirTemp = SupAirTemp;
guidata(hObject,handles);
handles.a = get(handles.slider2,'Value');
plot(handles.SupAirTemp,handles.a*handles.OutAirTemp)

在slider2_Callback

a = get(hObject,'Value')

很明显我错过了什么!任何指针,理论或代码都将受到极大的欢迎。

Edit1 上面没有错误消息。但是滑动滑块时没有改变图形。

2 个答案:

答案 0 :(得分:3)

你没有说出你得到的错误信息或问题是什么,所以我们无法猜出是什么问题。但是,我可以看到一些错误:

  • 您可能需要指定发布plot命令时要绘制的轴的句柄
  • 您的slider2_Callback,您可能需要

    handles.a = get(hObject,'Value') guidata(hObject,handles);

  • 对于您的Graphslide_OpeningFcn,您没有说明OutAirTempSupAirTemp的来源。我也会在功能结束时发出guidata,而不是像你一样在中间发出。{/ p>

答案 1 :(得分:2)

滑块回调是释放后执行的回调。在上面的代码中,您需要更新在滑块回调中的轴中绘制的值;你实际上非常接近。我想移动这些界限:

handles.a = get(handles.slider2,'Value');
plot(handles.SupAirTemp,handles.a*handles.OutAirTemp)
滑块回调内的

会做你想要的。

另外,您可以查看以下代码,生成一个简单的GUI,其中包含轴,滑块和编辑框,其中显示滑块的当前值。 您可以设置滑块的属性,例如min,max和step,以获得所需的行为。

function GUI_slider
clc
clear

%// Create GUI controls
handles.figure = figure('Position',[100 100 500 500],'Units','Pixels');

handles.axes1 = axes('Units','Pixels','Position',[60,100,400,300]);

handles.Slider1 = uicontrol('Style','slider','Position',[60 20 400 50],'Min',0,'Max',1,'SliderStep',[.1 .1],'Callback',@SliderCallback);

handles.Edit1 = uicontrol('Style','Edit','Position',[250 450 100 20],'String','Update Me');
handles.Text1 = uicontrol('Style','Text','Position',[180 450 60 20],'String','Slider Value');

handles.xrange = 1: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 the 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*rand(1,20),'Parent',handles.axes1);
    end

end

希望有所帮助!