2014-10-29 5 views
0

정말 간단한 질문입니다. GUI을 만들고 슬라이더로 무엇인가가 변경되는 간단한 plot을 만들고 싶습니다. 나는 GUI를 사용하고 있고 패널과 axies1에 슬라이더 + 텍스트가 있습니다. 우선 슬라이더를 1:10 (특정 증분 없음)에서 y- 값 (1:10 씩)으로 이동 시키려고합니다. slider2_CallbackMATLAB GUI에서 슬라이더 사용

a = get(hObject,'Value') 

에서 Graphslide_OpeningFcn

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

에서

그래서 분명히 내가 뭔가를 놓친 거지 : 그래서 내가 가지고있는 일반적인 자동 생성 코드를 떠나 GUI에 내 데이터를 가져 왔습니다! 모든 포인터, 이론 또는 코드가 크게 받게됩니다.

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

다시 한번 고마워. 나는 그곳에 원래의 '줄거리'를 남겨 두어 시작시 비례 그래프를 그곳에 남겨 두었습니다. 그런 다음 원하는 축척의 그래프로 축을 다시로드합니다. – josh

+0

대단히 기쁩니다! –

+0

GUI를 사용할 때 GUI를 사용할 때 GUI 시작시'clc' '모두 지우기 ' 'close all'을 사용하여 메모리를 지울 필요가 있습니까? 나는 추측하고 있지만 최선의 판단을하고 그것이 전체적인 질문의 가치가 없다고 생각했습니다. – josh

3

어떤 오류 메시지가 표시되는지 또는 문제가 무엇인지 알 수 없으므로 잘못된 정보를 추측 할 수 없습니다. 그러나, 내가 볼 수있는 몇 가지 잘못이되어 있습니다

  • 당신은 아마 당신의 slider2_Callbackplot 명령
  • 을 발행 할 때 플롯 할 수있는 축의 핸들을 지정해야합니다, 당신은 아마

    필요 OutAirTempSupAirTemp 어디에서 온 당신 Graphslide_OpeningFcn에 대한

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

  • , 당신은 말을하지 않습니다. 나는 또한 당신이하고있는 것처럼 중간보다는 기능의 끝에 guidata을 발행 할 것이다.

+0

오류 메시지가 없습니다. 그것은 슬라이더를 미끄러 뜨릴 때 그래프를 변경하지 못했습니다. 'OutAirTemp'와'SupAirTemp'을 가져오고 멋지게 꾸미는 중입니다. Graphslide_OpeningFcn 함수의 끝으로 guidata를 이동했습니다. 나는 handles.axes1에 추가했지만 이것은 변경되지 않았습니다. 첫 번째 글 머리 점은 무엇을 의미합니까? 감사합니다 – josh

+1

'plot'을위한 문서를보세요.'plot (handles.ax, handles.SupAirTemp, handles.a * handles.OutAirTemp)''handles.ax'는 축의 핸들입니다. GUI, 처음 축 생성). 그러나 @ Benoit_11이 지적했듯이,'plot' 호출은 GUI 열기 함수가 아니라 슬라이더 콜백에 있어야합니다. – am304