2014-10-29 819 views
0

真的很简单的问题。我想用简单的plot创建GUI,它用滑块改变某些东西。我一直在使用GUI,并在面板和轴上有一个滑块+文本1。所以对于初学者,我只希望滑块从1:10(没有特定的增量)和缩放y值(按1:10)。我已经导入我的数据到GUI,所以离开了通用的自动生成的代码,我有:在MATLAB 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

滑块回调是一旦您释放滑块回调。在上面的代码中,您需要更新滑块回调中在轴中绘制的值;实际上你非常接近。我认为移动这些线:

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 

希望有所帮助!

+0

它的工作!再次感谢你。我把原来的'plot'放在那里,以便它在启动时具有未缩放的图形。然后使用缩放图重新加载轴,这正是我想要的。 – josh 2014-10-29 15:22:25

+0

非常高兴它的作品! – 2014-10-29 15:22:47

+0

在类似的(ish)说明中,当使用GUI时,是否需要在GUI开始时使用'clc' 'clear all'''''''''关闭所有'来清除内存?我猜不是,但认为最好检查一下,并且这不值得一个完整的问题。 – josh 2014-10-29 15:27:16

3

你不说你得到了什么错误信息或问题是什么,所以我们不能猜测出了什么问题。不过,也有几件事情,我可以看到的错误:

  • 您可能需要指定在其发布您slider2_Callbackplot命令
  • 当绘制轴的手柄,你可能需要

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

  • Graphslide_OpeningFcn,你不说在哪里OutAirTempSupAirTemp从何而来。我也会在函数结束时发出guidata,而不是像您正在做的那样发出。

+0

没有错误消息。当我滑动滑块时,它并没有改变图形。 'OutAirTemp'和'SupAirTemp'是进口的,并且绘图很好。我已经将guidata移动到函数Graphslide_OpeningFcn的末尾。我添加在handles.axes1中,但这没有改变。你的第一个要点是什么意思?谢谢 – josh 2014-10-29 15:13:47

+1

查看'plot'的文档,我的意思是plot(handles.ax,handles.SupAirTemp,handles.a * handles.OutAirTemp)'其中'handles.ax'是轴的手柄(在GUI,您首先创建轴)。然而,正如@ Benoit_11指出的那样,'plot'调用应该在滑块回调中,而不是在GUI开启函数中。 – am304 2014-10-29 15:32:26