在MatlabGUI中使用滑块

在MatlabGUI中使用滑块,matlab,user-interface,slider,matlab-figure,matlab-guide,Matlab,User Interface,Slider,Matlab Figure,Matlab Guide,非常简单的问题。我想用一个简单的绘图来创建GUI,它可以用一个滑块来改变一些东西。我一直在使用GUI,在面板和axies1上有一个滑块+文本。所以对于初学者,我只希望滑块从1:10开始(没有特定的增量)并缩放y值(按1:10)。我已将数据导入GUI,因此省去了我的通用自动生成代码: 在图形下滑动打开FCN handles.OutAirTemp = OutAirTemp; handles.SupAirTemp = SupAirTemp; guidata(hObject,handles); hand

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

在图形下滑动打开FCN

handles.OutAirTemp = OutAirTemp;
handles.SupAirTemp = SupAirTemp;
guidata(hObject,handles);
handles.a = get(handles.slider2,'Value');
plot(handles.SupAirTemp,handles.a*handles.OutAirTemp)
在slider2_回调下

a = get(hObject,'Value')
很明显我错过了什么!任何指针、理论或代码都会被广泛接受

Edit1

没有针对上述内容的错误消息。但是,滑动滑块时,它不会更改图形。

滑块回调是在释放滑块后执行的回调。在上面的代码中,需要更新在滑块回调的轴中绘制的值;事实上你很接近。我认为移动这些线:

handles.a = get(handles.slider2,'Value');
plot(handles.SupAirTemp,handles.a*handles.OutAirTemp)
在滑块内部,回调将执行您想要的操作

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
另一方面,您可以查看以下代码,以生成一个简单的GUI,其中包含一个轴、一个滑块和一个显示滑块当前值的编辑框。 您可以设置滑块的属性,如最小值、最大值和步长,以获得所需的行为

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

希望有帮助

滑块回调是在释放它后执行的回调。在上面的代码中,需要更新在滑块回调的轴中绘制的值;事实上你很接近。我认为移动这些线:

handles.a = get(handles.slider2,'Value');
plot(handles.SupAirTemp,handles.a*handles.OutAirTemp)
在滑块内部,回调将执行您想要的操作

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
另一方面,您可以查看以下代码,以生成一个简单的GUI,其中包含一个轴、一个滑块和一个显示滑块当前值的编辑框。 您可以设置滑块的属性,如最小值、最大值和步长,以获得所需的行为

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

希望有帮助

您没有说您收到了什么错误消息或问题是什么,因此我们无法猜测出问题出在哪里。然而,我可以看出有几件事是错误的:

  • 发出
    plot
    命令时,可能需要指定要在其上打印的轴的句柄
  • 对于您的
    滑块2\u回调
    ,您可能需要

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

  • 对于您的
    Graphslide\u OpeningFcn
    ,您不会说
    OutAirTemp
    SupAirTemp
    来自哪里。我还将在函数的末尾发布<代码>指南>代码>而不是在你正在做的中间。


您无法说出收到的错误信息或问题所在,因此我们无法猜测出问题所在。然而,我可以看出有几件事是错误的:

  • 发出
    plot
    命令时,可能需要指定要在其上打印的轴的句柄
  • 对于您的
    滑块2\u回调
    ,您可能需要

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

  • 对于您的
    Graphslide\u OpeningFcn
    ,您不会说
    OutAirTemp
    SupAirTemp
    来自哪里。我还将在函数的末尾发布<代码>指南>代码>而不是在你正在做的中间。


没有错误消息。当我滑动滑块时,它没有改变图形
OutAirTemp
SupAirTemp
已导入,并且打印效果良好。我已将GUI数据移动到函数图的末尾Slide_OpeningFcn。我添加了handles.axes1,但这并没有改变什么。你的第一个要点是什么意思?感谢在文档中查看
plot
,我的意思是
plot(handles.ax,handles.SupAirTemp,handles.a*handles.OutAirTemp)
其中
handles.ax
是轴的句柄(在GUI的其他地方获得,您首先在那里创建轴)。然而,正如@Benoit_11所指出的,
plot
调用应该在滑块回调中,而不是在GUI打开函数中。没有错误消息。当我滑动滑块时,它没有改变图形
OutAirTemp
SupAirTemp
已导入,并且打印效果良好。我已将GUI数据移动到函数图的末尾Slide_OpeningFcn。我添加了handles.axes1,但这并没有改变什么。你的第一个要点是什么意思?感谢在文档中查看
plot
,我的意思是
plot(handles.ax,handles.SupAirTemp,handles.a*handles.OutAirTemp)
其中
handles.ax
是轴的句柄(在GUI的其他地方获得,您首先在那里创建轴)。然而,正如@Benoit_11所指出的,
plot
调用应该在滑块回调中,而不是在GUI打开函数中。它起作用了!!再次感谢你。我把原始的
绘图
放在那里,这样它在启动时就有了未标度的图形。然后,它用缩放的图形重新加载轴,这正是我想要的。在类似的(ish)注释中,当使用GUI时,我是否需要使用
clc
全部清除
全部关闭
来清除GUI开始时的内存?我猜不是,但我认为最好检查一下,这不值得一个完整的问题。哦,事实上,这是我在脚本开始时的一个反射,使用clear和clc哈哈,你不一定要这样做,因为如果你使用多个GUI,可能会造成麻烦。例如:)它工作了!!再次感谢你。我把原始的
绘图
放在那里,这样它在启动时就有了未标度的图形。然后,它用缩放的图形重新加载轴,这正是我想要的。在类似的(ish)注释中,当使用GUI时,我是否需要使用
clc
全部清除
全部关闭
来清除GUI开始时的内存?我猜不是,但我认为最好检查一下,这不值得一个完整的问题。哦,事实上,这是我在脚本开始时的一个反射,使用clear和clc,哈哈,你不一定有