Matlab的GUI的slider滑动条和edit动态文本框联合使用例程

news/2024/6/17 0:15:21 标签: matlab, gui

代码链接:https://download.csdn.net/download/benchuspx/12404653

今天想用matlab的plot画个函数的曲线图,函数有一个参数a可以调,不同的a对应不同的曲线图。为了方便观察a的改变对曲线的影响,我想做一个简单的GUI用户界面,通过界面上的slider滑动条拖动改变a,或者从动态文本框输入a,这样可以实时观察曲线图的变化。

结果网上找了一堆资料全都零零散散,连这么简单的功能都没个完整的教程。于是根据自己学的写一个。

以y=ax的plot为例,效果如下。这里用到的代码可以在我的资源里下载。
链接地址点这
MATLAB版本为2018b

在这里插入图片描述

gifcam是个好东西,动图都靠它

操作如下:

新建GUI窗口

命令行输入guide,可以进入matlab的GUI功能。后面如果要修改GUI窗口的属性,也可以这样输入guide,然后打开现有GUI。
下面新建一个GUI。
在这里插入图片描述
然后就是傻瓜操作,画布大小可以改。把作图区、动态文本框拖进去,修改identifier(它的代号,后面编辑的时候是它的名字),字号字体,初始文本。也可以都不用改。
在这里插入图片描述

slider也是一样,拖进去,改参数。比如最大最小值什么的。

在这里插入图片描述
这里有些小技巧,比如动态文本框的MAX一般为1,就是只能输入一行,输入完了按回车就可以完事。如果MAX设置2,就可以输入两行哦。如果想把滑动条设置成竖着的,只需要鼠标调整它的大小变成竖着的就行了。

GUI建好了,可以保存,关闭。后面如果还想修改上面这些东西,可以命令行敲guide,打开改。
这时候matlab的编辑区会产生这个figure的源代码。下面实现GUI的功能全靠写代码。

写代码实现功能

下面先来看看它默认生成的文件是个什么意思

function varargout = untitled1(varargin)
% UNTITLED1 MATLAB code for untitled1.fig
%      UNTITLED1, by itself, creates a new UNTITLED1 or raises the existing
%      singleton*.
%
%      H = UNTITLED1 returns the handle to a new UNTITLED1 or the handle to
%      the existing singleton*.
%
%      UNTITLED1('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in UNTITLED1.M with the given input arguments.
%
%      UNTITLED1('Property','Value',...) creates a new UNTITLED1 or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before untitled1_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to untitled1_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help untitled1

% Last Modified by GUIDE v2.5 09-May-2020 21:22:10

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @untitled1_OpeningFcn, ...
                   'gui_OutputFcn',  @untitled1_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before untitled1 is made visible.
function untitled1_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to untitled1 (see VARARGIN)

% Choose default command line output for untitled1
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes untitled1 wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = untitled1_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;



function edit1_Callback(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text
%        str2double(get(hObject,'String')) returns contents of edit1 as a double


% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
% hObject    handle to slider1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider


% --- Executes during object creation, after setting all properties.
function slider1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to slider1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end

反正就是大段的注释,看看就好。可以写代码加入自己想要的功能。

  1. 第一个function是untitiled1,是文件的一些初始设置。里面都不用管。第二个类似,也不用管。

  2. 第三个是OutputFcn,里面本来的代码不用动,把我们想写的初始代码写这。比如窗口一打开,就画个初始的图y=ax,a先取1。

  3. edit1_Callback函数
    这个是动态文本框的响应函数,就是你在窗口中操作动态文本框,它就会运行下面的程序。如果你的动态文本框给的identifier名字是edit2,那这个函数名也与之对应。有两句常用的代码。注意如果这两句代码用在edit1_Callback函数下,可以用hObject获取句柄。如果想在别的function中这些代码改变edit1的文本,则需要用handles.edit1获取句柄。

    editdata = get(hObject,'String');   %得到输入的字符串,如果要得到数字,还需要用str2num
    set(handles.edit1,'string',‘我要输入的文本’);  %这句代码可以改变文本框中的文本。 
  1. edit1_CreateFcn函数
    动态文本框的初始函数。GUI界面一打开,这个函数下的代码就运行一下。可以设置文本框的初值。比如我设置文本框初始显示1
	set(hObject,'string',1);
  1. slider1_Callback函数
    滑动条slider1的响应函数,记住以下两句话
     sliderdata = get(hObject,'Value');  %得到滑动条的值
     set(handles.slider1,'value',a);  % 设置滑动条的值,设置的是数值,value类型
  1. slider1_CreateFcn函数
    滑动条slider1的初始函数。GUI刚打开的时候运行下面这个,可以设置滑动条初始位置。比如设置为1
 set(hObject,'Value',1);   

也可以根据自己的需要新写一些function,方便引用
为了实现文初提到的功能–文本框和滑动条同时可以调节a值,并实时绘图y=ax。可以在edit1
的响应函数下写

global a;
    global x;
    input = str2num(get(hObject,'String'));
    if input<=10
        a = input;
        y = a*x;
        plot(x,y);
        ylim([0,100]);
        set(handles.slider1,'Value',a); %使得滑动条和输入框保持一致
    else
        msgbox('invalid value','warning','warn'); %error message window
    end    

注意同一全局变量在所有被用到的地方都应该先申明global,不然就当局部变量处理了。

同理,slider1的响应函数可以写入:

global a;
    global x;
    input = get(hObject,'Value');
    a = input;
    y = a*x;
    plot(x,y);
    ylim([0,100]);
    set(handles.edit1,'String',num2str(a)); %使得输入框edit1和滑动条保持一致

打开GUI的初始程序untitled1_OutputFcn可以如下(直接加在对应function里面):

global a ;
global x ;
a=1;
x = 0:10;
y = a*x;
plot(x,y);
ylim([0,100]);

% Get default command line output from handles structure
varargout{1} = handles.output;

这样就可以啦!
如文初,点击运行程序,可以跳出想要的GUI,调节a值,曲线图也变化。
如果调的过程中有bug,可以评论让大家都知道。

这里用到的代码可以在我的资源里下载。如下
https://download.csdn.net/download/benchuspx/12404653


http://www.niftyadmin.cn/n/948648.html

相关文章

U盘硬盘重装系统GHOST方法教程

资源链接&#xff1a;https://download.csdn.net/download/benchuspx/12466894 今日重装系统&#xff0c;费劲周折。 先用大白菜制作好u盘PE系统&#xff0c;然后在网上下载win10GHOST文件放到u盘的GHOST文件夹。然后插上电脑&#xff0c;启动按F12&#xff0c;进入安装&…

Word公式编号与引用公式(详细教程)-制表符、题注、交叉引用

如何在word里给公式编号并引用公式编号呢&#xff1f;主要有以下三步 添加制表符&#xff1a;让公式居中&#xff0c;编号居右。并保存为样式插入题注&#xff1a;在公式后插入equation公式题注&#xff0c;手动加上括号和样式分隔符&#xff08;CtrlAltEnter&#xff09;交叉…

tensorflow-gpu和Cuda、cuDNN安装成功经验(win10、无需Anaconda)

因为自己的win10笔记本上用cpu跑深度学习的训练实在是慢&#xff0c;想把电脑上的一块显存2G的Nvida Geforce 940mx的显卡用起来。虽然这个显卡很普通&#xff0c;但比cpu跑的还是快多了。&#xff08;因为GPU更适合进行矩阵运算&#xff09; 经过一下午的努力&#xff0c;一波…

P200阿木无人机学习笔记--二维码引导着陆

目录 我手上的阿木实验室的P200无人机配置 现阶段目标&#xff1a;实现二维码引导着陆 项目理解 进度-更新中 踩坑经验 初次设置时没有显示器如何远程连接TX2&#xff1f; 虚拟机和双系统谁更好&#xff08;ubuntu&#xff09; 无人机无法解锁&#xff0c;报错"co…

傅里叶(Fourier)级数的指数形式与傅里叶变换(转载)

https://wenku.baidu.com/view/c0efc09b6137ee06eef91838.html

安装ubuntu18.04双系统时boot manager没有识别出U盘启动项

我的笔记本电脑品牌是Acer&#xff0c;已经安装了win10系统&#xff0c;现在安装ubuntu18.04双系统。 我的boot是UEFI的&#xff08;不是legacy&#xff09;&#xff0c;双硬盘&#xff08;128G固态硬盘1T机械硬盘&#xff09; 主要参考如下&#xff1a; 《Windows10安装ubu…

Prometheus阿木实验室开源项目下载与跑通 踩坑经验

Prometheus是阿木实验室提供的开源无人机开发项目&#xff0c;可以实现避障、激光雷达、自主降落等多种功能的gazebo仿真和配合P200无人机的真机实验。github上有完整的工程和Wiki讲解&#xff0c;链接&#xff1a;https://github.com/amov-lab/Prometheus Prometheus本质是个…

远程连接TX2的ubuntu系统(没有显示器):网线+路由器解决

我的到手TX2是没有显示器的&#xff0c;要么用HDMI线接上显示器&#xff0c;要么在一个wifi网络下使用nomachine远程桌面。我没有显示器也没有HDMI线&#xff0c;只能远程桌面连接。问题是想要远程连接就必须让TX2和我的电脑连接上同一个WiFi并下载好nomachine&#xff0c;可是…