簡體   English   中英

在MATLAB GUI中使用滑塊

[英]Use a slider in MATLAB GUI

真的很簡單的問題。 我希望創建一個簡單的plot GUI ,該plot可以通過滑塊進行更改。 我一直在使用GUI,並在面板和axies1上有一個Slider +文本。 因此,對於初學者,我只希望滑塊從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上面沒有錯誤消息。 但是,在滑動滑塊時它並沒有改變圖形。

您沒有說您收到什么錯誤消息或問題出在哪里,所以我們無法猜測出什么問題了。 但是,有幾件事我看錯了:

  • 您可能需要在發出plot命令時指定要在其上繪圖的軸的手柄
  • 對於您的slider2_Callback ,您可能需要

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

  • 對於您的Graphslide_OpeningFcn ,您不會說OutAirTempSupAirTemp來源。 我還將在函數末尾而不是在您執行中間的過程中發布guidata

滑塊回調是釋放后執行的回調。 在上面的代碼中,您需要更新在滑塊回調中的坐標軸上繪制的值。 你實際上很接近。 我認為改變這些路線:

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

滑塊回調內部將執行您想要的操作。

順便說一句,您可以看下面的代碼以生成帶有軸,滑塊和編輯框的簡單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

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM