2014-10-29 816 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