精华内容
下载资源
问答
  • matlab gui界面

    2013-01-04 20:50:44
    matlab gui界面制作ppt
  • Matlab GUI界面

    千次阅读 2018-04-23 09:01:43
    原址http://www.cnblogs.com/nktblog/archive/2012/05/04/2482875.html去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,... 创建Matlab GUI界面通常有两种方式: 1,使用 .m 文件直接动态添...

    原址http://www.cnblogs.com/nktblog/archive/2012/05/04/2482875.html

    去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录。

       从简单的例子说起吧。

       创建Matlab GUI界面通常有两种方式:

       1,使用 .m 文件直接动态添加控件
     
       2.  使用 GUIDE 快速的生成GUI界面

    显然第二种可视化编辑方法算更适合写大型程序。

    一:创建GUI


    1.在 .m文件中动态添加

    例如

    h_main=figure(‘name’,‘a demo of gui design’,‘menubar’,‘none’,…

       'numbertitle','off','position',[100 100 300 100]);

    h_edit=uicontrol('style','edit','backgroundcolor',[1 1 1],'position',[20 20 50 20],...

       'tag','myedit','string','1','horizontalalignment','left');

    h_but1=uicontrol('style','pushbutton','position',[20 50 50 20],'string','INC',...

       'callback',['v=eval(get(h_edit,''string''));',...

          'set(h_edit,''string'',int2str(v+1));']);

    h_but2=uicontrol('style','pushbutton','position',[80 50 50 20],'string','DEC',...

       'callback',['v=eval(get(h_edit,''string''));','set(h_edit,''string'',int2str(v-1));']);


    2.使用GUIDE帮助创建GUI

    在Command 里面输入 GUIDE 或者从菜单里面,或者从快捷按钮均可 进入 GUIDE



    新建并且保存后,会生成相应的fig文件和m文件,在Layout编辑视图,可以使用如下工具:

    Layout Editor:布局编辑器;
    Alignment Tool:对齐工具;
    Property Inspector:对象属性观察器;
    Object Browser:对象浏览器;
    Menu Editor:菜单编辑器。

    二:使用控件

    新建一个布局(窗口),可以在新窗口中添加如下控件

    1.静态文本(Static Text)        2.编辑框(Edit Text)控件
    3.列表框(Listbox)控件            4.滚动条(Slider)控件
    5.按钮(Push Button)控件        6.开关按钮(Toggle Button)控件
    7.单选按钮(Radio Button)控件        8.按钮组(Button Group)控件
    9.检查框(Check Box)控件        10.列表框(Listbox)控件
    11.弹出式菜单(Popup Menu)控件    12.坐标轴(Axes)控件
    13.面板(Panel)控件


    每一个控件都有自己的属性常规属性有:

            一、控件风格和外观
            (1)BackgroundColor:设置控件背景颜色,使用[R G B]或颜色定义。
            (2)CData:在控件上显示的真彩色图像,使用矩阵表示。
            (3)ForegroundColor:文本颜色。
            (4)String属性:控件上的文本,以及列表框和弹出菜单的选项。
            (5)Visible:控件是否可见。

            二、对象的常规信息
            (1)Enable属性: 表示此控件的使能状态,设置为on”,表示可选,为“off”时则表示不可选。
            (2)Style:控件对象类型。
            (3)Tag:控件表示(用户定义)。
            (4)TooltipString属性:提示信息显示。当鼠标指针位于此控件上时,显示提示信息。
            (5)UserData:用户指定数据。
            (6)Position:控件对象的尺寸和位置。
            (7)Units:设置控件的位置及大小的单位
            (8)有关字体的属性,如 FontAngle, FontName等。

            三、控件回调函数的执行
            (1)BusyAction:处理回调函数的中断。有两种选项:即Cancel:取消中断事件,queue:排队(默认设置)。
            (2)ButtonDownFcn属性:按钮按下时的处理函数。
            (3)CallBack属性:是连接程序界面整个程序系统的实质性功能的纽带。该属性值应该为一个可以直接求值的字符串,在该对象被选中和改变时,系统将自动地对字符串进行求值。
            (4)CreateFcn:在对象产生过程中执行的回调函数。
            (5)DeleteFcn:删除对象过程中执行的回调函数。
            (6)Interruptible属性:指定当前的回调函数在执行时是否允许中断,去执行其他的函数。

            四、控件当前状态信息
            (1)ListboxTop:在列表框中显示的最顶层的字符串的索引。
            (2)Max:最大值。
            (3)Min:最小值。
            (4)Value:控件的当前值。


    你可以使用属性编辑器来设置属性




    三:写回调函数 CallBack

    每个控件都有几种回调函数,右键选中的控件一般会有如下菜单:


    然后就可以跳转到相应的 Editor中编辑代码,GUIDE会自动生成 相应的函数体,函数名,名称一般是 控件 Tag+ Call类型名 参数有三个 ( hObject, eventdata, handles)

    其中 hObject 为发生事件的源控件,eventdata为事件数据结构,handles为传入的对象句柄

    CreateFcn 是在控件对象创建的时候发生(一般为初始化样式,颜色,初始值等)
    DeleteFcn 实在空间对象被清除的时候发生
    ButtonDownFcn和KeyPressFcn分别为鼠标点击和按键事件Callback

    CallBack为一般回调函数,因不同的控件而已异。例如按钮被按下时发生,下拉框改变值时发生,sliderbar 拖动时发生等等。


    四:句柄图形之间的层次关系


    可以创建 图形句柄的常见函数

    1.figure函数:创建一个新的图形对象。
    2.newplot函数:做好开始画新图形对象的准备。
    3.axes函数:创建坐标轴图形对象。
    4.line函数:画线。
    5.patch函数:填充多边形。
    6.surface函数:绘制三维曲面。
    7.image函数:显示图片对象。
    8.uicontrol函数:生成用户控制图形对象。
    9.uimenu函数:生成图形窗口的菜单中层次菜单与下一级子菜单。

    几个实用的小函数:

    uigetfile  选择文件对话框
    uiputfile  保存文件对话框
    uisetcolor  设置颜色对话框
    fontsetcolor  设置字体对话框
    msgbox    消息框
    warndlg    警告框
    helpdlg     消息框

    不过如果要让父窗口不可用,你需要使用uiwait来定焦于用户对话框。
    例如:

        h=helpdlg('Please press me!','Attention');
        uiwait(h);


    四:获取与设置对象属性


     常用函数:

    gcf函数:获得当前图形窗口的句柄
    gca函数:获得当前坐标轴的句柄
    gco函数:获得当前对象的句柄
    gcbo函数:获得当前正在执行调用的对象的句柄
    gcbf函数:获取包括正在执行调用的对象的图形句柄
    delete函数:删除句柄所对应的图形对象
    findobj函数:查找具有某种属性的图形对象


    设置方法:

    (1)get函数返回某些对象属性的当前值。例如:

    p=get(obj,'Position');     

    (2)函数set改变句柄图形对象属性,例如:
    set(obj,'Position',vect);


    五:函数调用


    在一个m文件中,可以定义多个函数,但是文件名一定要与第一个函数(主函数)一致,
    该文件中其他函数则为本文件的私有函数,外部不可访问(可以通过参数调用的方法访问,下面会描述)。

    例如在一个程序中,创建一个fig后,会生成这样一个m文件:

    function varargout =febirdfun(varargin)
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @febirdfun_OpeningFcn, ...
                       'gui_OutputFcn',  @febirdfun_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

    解析 一下这个主函数:首先 gui_State是一个结构,指定了figure打开和输出函数,

    开始 gui_CallBack为空,如果输入参数个数不为0,接下来将输入第一个参数传递给gui_State.callback。

    接下来用交给 gui_mainfcn函数处理,gui_mainfcn 根据gui_State和传入参数
    来确定是执子函数,还是打开 fig 文件和运行 OpeningFcn和OutputFcn。

    如过 gui_Callback为空,那么就运行打开主窗口fig文件,否则,调用子函数

    这个函数的作用有:
    1.当输入不带参数的时候,能够打开fig文件,并且初始化控件
    2.当指定需要调用的函数名时,可以作为其他控件callback使用 (实则调用同文件中的子函数)
       例如,在某一个控件的 callback 里面这样写:(febrdfun为主函数)
        febirdfun("@push_button_Callback",gcbf,[])
      这样的调用就可以调用文件里面的子函数。

    当然也可以使用其他文件里面的函数作为callback,不过那样的话,数据传递会麻烦一些。


    下面看figure Openning Function


    %================================

    function Main_OpeningFcn(hObject, eventdata, handles, varargin)

    handles.output = hObject;
    % 通常在这里面定义自己的数据结构例如

    s=struct("P1",v1...
                 "P2",v2);
    handles.MyStruct=s;
    % 更新handles数据结构  非常重要!!
    guidata(hObject, handles);

    %================================
    function varargout = Main_OutputFcn(hObject, eventdata, handles)
    varargout{1} = handles.output;

    这个函数是输出返回值的定义

    注意:  matlab 中,function 对应的 end 可以没有,但是随着版本的更新,end将会被要求。


    六:数据传递



    在matlab GUI程序中进行值传递我经常使用的两种方法:



    1.利用主函数 的 handles 数据结构传值



    例如在某一个图像窗口句柄 中有一个对象 handles(可以定义自己的数据结构)

    那么在一个子Callback函数中,可以通过handles传递数据:

    function  sliderbar1_Callback(hObject,eventdata,handles)

      %%  eg1

      v1=get(hObject,'value');

      obj=handles.Text1  %直接定位 Tag 为 Text1的控件

      set(obj,'value',v1);

      %%  eg2

      handles.MyStruct.P1=v1; % 更改handles中的数据

      guidata(hObject,handles); %更新 handles !!重要


    end




    2.利用控件的 UserData 来传值


     
    每一个控件一般都有一个属于自己的自定义域,userData,你可以定义这样一个域用来保存自己的数据,例如在定义 timer 的 TimerFcn中

    t1=timer('TimerFcn',{@Timer1Fcn},'ErrorFcn',@Timer1ErrorFcn},'Period',1.0,'ExecutionMode','fixedrate');

    t1.Userfata=handles.MyStruct;

    这里 Timer1Fcn的调用看似没有传入任何参数,实际上此函数的定义一定要有至少两个参数

    function Timer1Fcn(obj,eventata)

       obj.UserData=XXXXX;%可以这样共享数据
     
    end

    当然Timer定义的时候允许这样传递一个参数,当然这样也可以进行传值.

    t1=timer('TimerFcn',{@Timer1Fcn,handles},'ErrorFcn',{@Timer1ErroFcnr,handles},'Period',1.0,'ExecutionMode','fixedrate');

    展开全文
  • MATLAB GUI 界面

    2009-03-25 18:46:26
    MATLAB GUI 界面 毕业设计 重要参考资料.rar
  • MATLAB GUI界面

    2020-12-17 19:16:11
    文章目录前言一、GUI界面搭建步骤1.打开matlab,新建空白脚本,并在命令行窗口输入guide2.弹出窗口,如上图所示,选择默认选项,并修改图形路径,点击确定。3.熟悉基本控件,首先实现一个基本实例,导入一张图片4....
    
    
    


    前言

    由于研究生毕业前夕,需要进行系统检查,将自己的数据与仿真结果通过界面的形式表示出来,而且我之前用的仿真软件是MATLAB 2016b ,所以从昨天晚上我就开始查找用matlab实现GUI界面的相关资料,但是网上的一些博客和知乎描述的并不清晰,通过自己实践,整理相关知识如下,主要包括相关组件,以及数据,图片,视频导入的方式和相关代码。


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、GUI界面搭建步骤

    1.打开matlab,新建空白脚本,并在命令行窗口输入guide

    代码如下(示例):

    >>guide
    

    在这里插入图片描述

    2.弹出窗口,如上图所示,选择默认选项,并修改图形路径,点击确定。

    在这里插入图片描述
    一个基本的界面就创建好了,这时文件夹中有两个文件,一个是.m的代码文件,一个是.fig的图像文件。

    3.熟悉基本控件,首先实现一个基本实例,导入一张图片

    1、将左侧控件中的面板拖到界面中;
    2、将左侧控件中的坐标轴拖到面板上,并调节大小;
    3、将左侧的按钮拖到面板上,最后应该表现为下图所示。

    在这里插入图片描述
    4、将想要显示的图片保存在同一文件夹中,并重命名为.bmp格式,比如数据集分布.bmp
    5、如果想通过点击按钮,在坐标axes1中出现一张图片, 则右键点击按钮——>查看回调——>callback,此时跳转到.m文件中对应的有关按钮的函数代码中,在该函数下添加代码如下:

    代码如下(示例):

    im = imread('数据集分布.bmp');
    axes(handles.axes1)
    imshow(im)
    
    

    其中,axes1表示显示图片的坐标轴的Tag值,界面中添加的每一个控件都有其独一无二的Tag值,可以通过双击该控件查看。
    6、运行.m文件,如下:

    在这里插入图片描述
    6、点击按钮,就可以在坐标轴的位置看到图片了。

    4.如果想在一个坐标轴输入多张图片怎么办呢?使用弹出式菜单。为了节省空间,我想要在一个坐标系中分别介绍不同类型的图片,并且可以自由切换,下面介绍弹出式菜单的使用方式

    1、在上述描述的基础上,将左侧控件中的弹出式菜单拖到面板中
    2、双击弹出式菜单,可以看到有关的一些参数,点击string,可以在里面加入多个需要看到的图片名字,并将所有图片保存到同一文件夹下,后缀名为.bmp
    在这里插入图片描述
    3、, 则右键点击弹出式菜单——>查看回调——>callback,此时跳转到.m文件中对应的有关弹出式菜单的函数代码中,在该函数下添加代码如下:

    var = get(handles.popupmenu2,'value');
    axes(handles.axes1)
    switch var
        case 1
           i1 = imread('公开烟雾数据集.bmp');
           imshow(i1)
        case 2
           i2 = imread('实际采集烟雾图像.bmp');
           imshow(i2)
        case 3
           i3 = imread('实际采集非烟雾图像.bmp');
           imshow(i3)
        case 4
           i4 = imread('处理后数据集.bmp');
           imshow(i4)  
    end
    
    

    4、运行.m文件,如下:
    在这里插入图片描述

    总结

    本博客主要介绍了如何在界面插图片的基本步骤,后续博客主要介绍如何在界面引入视频以及多个界面之间的交互。

    展开全文
  • matlabGUI界面

    2014-03-05 16:53:48
    这个适合初学者用,尤其是刚刚接触matlab这个工具的,这个只是比较简单的,如果想要更加精通的话,不推荐使用这种方式
  • MATLAB GUI界面设计

    2018-08-17 22:31:31
    MATLAB GUI界面设计,简单易懂,GUI设计比较好,建议学习。
  • 《MatlabGUIDE使用说明(MatlabGUI界面)》由会员分享,可在线阅读,更多相关《MatlabGUIDE使用说明(MatlabGUI界面)(8页珍藏版)》请在人人文库网上搜索。1、去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,...

    《MatlabGUIDE使用说明(MatlabGUI界面)》由会员分享,可在线阅读,更多相关《MatlabGUIDE使用说明(MatlabGUI界面)(8页珍藏版)》请在人人文库网上搜索。

    1、去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录。从简单的例子说起吧。创建Matlab GUI界面通常有两种方式:1,使用 .m 文件直接动态添加控件 2. 使用 GUIDE 快速的生成GUI界面显然第二种可视化编辑方法算更适合写大型程序。一:创建GUI1.在 .m文件中动态添加例如 h_main=figure(name,a demo of gui design,menubar,none,numbertitle,off,position,100 100 300 100);h_edit=。

    2、uicontrol(style,edit,backgroundcolor,1 1 1,position,20 20 50 20,.tag,myedit,string,1,horizontalalignment,left);h_but1=uicontrol(style,pushbutton,position,20 50 50 20,string,INC,.callback,v=eval(get(h_edit,string);,.set(h_edit,string,int2str(v+1););h_but2=uicontrol(style,pushbutton,position,80 50 50 。

    3、20,string,DEC,.callback,v=eval(get(h_edit,string);,set(h_edit,string,int2str(v-1););2.使用GUIDE帮助创建GUI在Command 里面输入 GUIDE 或者从菜单里面,或者从快捷按钮均可 进入 GUIDE新建并且保存后,会生成相应的fig文件和m文件,在Layout编辑视图,可以使用如下工具:Layout Editor:布局编辑器;Alignment Tool:对齐工具;Property Inspector:对象属性观察器;Object Browser:对象浏览器;Menu Editor:菜单编辑器。二:使。

    4、用控件新建一个布局(窗口),可以在新窗口中添加如下控件1静态文本(Static Text) 2编辑框(Edit Text)控件3列表框(Listbox)控件 4滚动条(Slider)控件5按钮(Push Button)控件 6开关按钮(Toggle Button)控件7单选按钮(Radio Button)控件 8按钮组(Button Group)控件9检查框(Check Box)控件 10列表框(Listbox)控件11弹出式菜单(Popup Menu)控件 12坐标轴(Axes)控件13面板(Panel)控件每一个控件都有自己的属性常规属性有:一、控件风格和外观(1)BackgroundCo。

    5、lor:设置控件背景颜色,使用R G B或颜色定义。(2)CData:在控件上显示的真彩色图像,使用矩阵表示。(3)ForegroundColor:文本颜色。(4)String属性:控件上的文本,以及列表框和弹出菜单的选项。(5)Visible:控件是否可见。二、对象的常规信息(1)Enable属性: 表示此控件的使能状态,设置为on”,表示可选,为“off”时则表示不可选。(2)Style:控件对象类型。(3)Tag:控件表示(用户定义)。(4)TooltipString属性:提示信息显示。当鼠标指针位于此控件上时,显示提示信息。(5)UserData:用户指定数据。(6)Position:。

    6、控件对象的尺寸和位置。(7)Units:设置控件的位置及大小的单位(8)有关字体的属性,如 FontAngle, FontName等。三、控件回调函数的执行(1)BusyAction:处理回调函数的中断。有两种选项:即Cancel:取消中断事件,queue:排队(默认设置)。(2)ButtonDownFcn属性:按钮按下时的处理函数。(3)CallBack属性:是连接程序界面整个程序系统的实质性功能的纽带。该属性值应该为一个可以直接求值的字符串,在该对象被选中和改变时,系统将自动地对字符串进行求值。(4)CreateFcn:在对象产生过程中执行的回调函数。(5)DeleteFcn:删除对象过程。

    7、中执行的回调函数。(6)Interruptible属性:指定当前的回调函数在执行时是否允许中断,去执行其他的函数。四、控件当前状态信息(1)ListboxTop:在列表框中显示的最顶层的字符串的索引。(2)Max:最大值。(3)Min:最小值。(4)Value:控件的当前值。你可以使用属性编辑器来设置属性三:写回调函数 CallBack 每个控件都有几种回调函数,右键选中的控件一般会有如下菜单:然后就可以跳转到相应的 Editor中编辑代码,GUIDE会自动生成 相应的函数体,函数名,名称一般是 控件 Tag+ Call类型名 参数有三个 ( hObject, eventdata, handl。

    8、es)其中 hObject 为发生事件的源控件,eventdata为事件数据结构,handles为传入的对象句柄CreateFcn 是在控件对象创建的时候发生(一般为初始化样式,颜色,初始值等)DeleteFcn 实在空间对象被清除的时候发生ButtonDownFcn和KeyPressFcn分别为鼠标点击和按键事件CallbackCallBack为一般回调函数,因不同的控件而已异。例如按钮被按下时发生,下拉框改变值时发生,sliderbar 拖动时发生等等。四:句柄图形之间的层次关系可以创建 图形句柄的常见函数1figure函数:创建一个新的图形对象。2newplot函数:做好开始画新图形对象。

    9、的准备。3axes函数:创建坐标轴图形对象。4line函数:画线。5patch函数:填充多边形。6surface函数:绘制三维曲面。7image函数:显示图片对象。8uicontrol函数:生成用户控制图形对象。 9uimenu函数:生成图形窗口的菜单中层次菜单与下一级子菜单。几个实用的小函数:uigetfile 选择文件对话框uiputfile 保存文件对话框uisetcolor 设置颜色对话框fontsetcolor 设置字体对话框msgbox 消息框 warndlg 警告框helpdlg 消息框不过如果要让父窗口不可用,你需要使用uiwait来定焦于用户对话框。例如:h=helpdlg(。

    10、Please press me!,Attention);uiwait(h);四:获取与设置对象属性常用函数:gcf函数:获得当前图形窗口的句柄gca函数:获得当前坐标轴的句柄gco函数:获得当前对象的句柄gcbo函数:获得当前正在执行调用的对象的句柄gcbf函数:获取包括正在执行调用的对象的图形句柄delete函数:删除句柄所对应的图形对象findobj函数:查找具有某种属性的图形对象设置方法:(1)get函数返回某些对象属性的当前值。例如:pget(obj,Position); (2)函数set改变句柄图形对象属性,例如:set(obj,Position,vect);五:函数调用在一个m文件。

    11、中,可以定义多个函数,但是文件名一定要与第一个函数(主函数)一致,该文件中其他函数则为本文件的私有函数,外部不可访问(可以通过参数调用的方法访问,下面会描述)。例如在一个程序中,创建一个fig后,会生成这样一个m文件:function varargout =febirdfun(varargin)gui_Singleton = 1;gui_State = struct(gui_Name, mfilename, .gui_Singleton, gui_Singleton, .gui_OpeningFcn, febirdfun_OpeningFcn, .gui_OutputFcn, febirdfu。

    12、n_OutputFcn, .gui_LayoutFcn, , .gui_Callback, );if nargin & ischar(varargin1)gui_State.gui_Callback = str2func(varargin1);endif nargoutvarargout1:nargout = gui_mainfcn(gui_State, varargin:);elsegui_mainfcn(gui_State, varargin:);end解析 一下这个主函数:首先 gui_State是一个结构,指定了figure打开和输出函数,开始 gui_CallBack为空,如果输入参。

    13、数个数不为0,接下来将输入第一个参数传递给gui_State.callback。接下来用交给 gui_mainfcn函数处理,gui_mainfcn 根据gui_State和传入参数来确定是执子函数,还是打开 fig 文件和运行 OpeningFcn和OutputFcn。如过 gui_Callback为空,那么就运行打开主窗口fig文件,否则,调用子函数这个函数的作用有:1.当输入不带参数的时候,能够打开fig文件,并且初始化控件2.当指定需要调用的函数名时,可以作为其他控件callback使用 (实则调用同文件中的子函数)例如,在某一个控件的 callback 里面这样写:(febrdfun。

    14、为主函数)febirdfun(push_button_Callback,gcbf,)这样的调用就可以调用文件里面的子函数。当然也可以使用其他文件里面的函数作为callback,不过那样的话,数据传递会麻烦一些。下面看figure Openning Function%=function Main_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;% 通常在这里面定义自己的数据结构例如s=struct(P1,v1.P2,v2);handles.MyStruct=s; % 更新handles数据结构 非。

    15、常重要!guidata(hObject, handles);%=function varargout = Main_OutputFcn(hObject, eventdata, handles)varargout1 = handles.output;这个函数是输出返回值的定义注意: matlab 中,function 对应的 end 可以没有,但是随着版本的更新,end将会被要求。六:数据传递在matlab GUI程序中进行值传递我经常使用的两种方法:1.利用主函数 的 handles 数据结构传值例如在某一个图像窗口句柄 中有一个对象 handles(可以定义自己的数据结构)那么在一个子Cal。

    16、lback函数中,可以通过handles传递数据:function sliderbar1_Callback(hObject,eventdata,handles)% eg1v1=get(hObject,value);obj=handles.Text1 %直接定位 Tag 为 Text1的控件 set(obj,value,v1);% eg2handles.MyStruct.P1=v1; % 更改handles中的数据guidata(hObject,handles); %更新 handles !重要end2.利用控件的 UserData 来传值每一个控件一般都有一个属于自己的自定义域,userDat。

    17、a,你可以定义这样一个域用来保存自己的数据,例如在定义 timer 的 TimerFcn中t1=timer(TimerFcn,Timer1Fcn,ErrorFcn,Timer1ErrorFcn,Period,1.0,ExecutionMode,fixedrate);t1.Userfata=handles.MyStruct;这里 Timer1Fcn的调用看似没有传入任何参数,实际上此函数的定义一定要有至少两个参数function Timer1Fcn(obj,eventata)obj.UserData=XXXXX;%可以这样共享数据end当然Timer定义的时候允许这样传递一个参数,当然这样也可以进行传值.t1=timer(TimerFcn,Timer1Fcn,handles,ErrorFcn,Timer1ErroFcnr,handles,Period,1.0,ExecutionMode,fixedrate。

    展开全文
  • 基于MATLAB GUI 界面设计解线性方程组matlab基于MATLAB GUI 界面设计解线性方程组matlab
  • MATLAB GUI界面编程——一些细节问题

    万次阅读 多人点赞 2019-01-06 22:59:58
    写在前面的话: 本篇博文主要对自己在进行MATLAB GUI设计时遇到的一些细节问题进行...一、使用MATLAB的GUIDE开发环境,来快速创建GUI界面 二、修改MATLAB GUI的.fig和.m文件名 三、修改MATLAB GUI界面的名字 四...

    写在前面的话:

    本篇博文主要对自己在进行MATLAB GUI设计时遇到的一些细节问题进行总结,点击下面目录中的相关问题,可以直接跳转至相应位置。另外,需要声明的是,我所使用的MATLAB版本——MATLAB R2017a。


    目录

    一、使用MATLAB的GUIDE开发环境,来快速创建GUI界面

    二、修改MATLAB GUI的.fig和.m文件名

    三、修改MATLAB GUI界面的名字

    四、修改MATLAB GUI界面左上角的Logo

    五、GUI的Edit Text控件输入文本默认居中对齐,如何设置其中的文本对齐方式?

    六、界面之间的交互——GUI怎么从欢迎界面跳转到另一个主界面?

    七、GUI界面,如何设置自定义菜单功能和按钮功能相同?

    八、运行GUI时,出现错误:Reference to non-existent field 'output'

    九、全局变量

    十、在设计GUI界面时,期望运行代码(具体某个算法)的同时,用一个进度条来展示算法的运行进度。

     


     

    一、使用MATLAB的GUIDE开发环境,来快速创建GUI界面

    MATLAB命令窗口输入guide,会打开下图所示的GUIDE启动对话框

    勾选左下角保存。这里保存文件名为“myGUI.fig”。点击确定后,会打开一个空白GUI设计界面。同时,会生成两个名为“myGUI”文件,后缀分别为“.fig”和“.m”。

     

    (GUI设计界面下,“File”——“Preferences”,在弹出的性能设置对话框中选择“Show names in component palette”(前面打钩),则GUIDE界面下的交互组件面板将会显示所有控件的名称。)。再点击下面的“Apply”(应用)、“OK”,即可完成设置。

     

    二、修改MATLAB GUI的.fig和.m文件名

    如果后面需要修改文件名(即修改MATLAB GUI的.fig和.m文件名)。提供一下两种做法:

    1、“文件另存为”的方式(File——>Save As)——推荐使用这种方式(方便)

    设置好新的文件名后,会自动生成两个新的文件,后缀依然分别为“.fig”和“.m”。

    2、直接对文件名进行修改(后缀为“.fig”和“.m”的两个文件都要修改,且一致)。

    并且,打开修改后的后缀为“.m”的文件,Ctrl+F,找到其中旧的文件名,点击“Replace All”替换全部。

     

    三、修改MATLAB GUI界面的名字

    例如如下界面:

    运行时:

    期望修改运行时左上角的界面名字为“用户登录界面”。

    方法一:

    菜单栏“View”——“Property Inspector”,打开GUI界面的属性设置窗口,下拉找到属性“name”,进行设置即可。

    (注意:这时候不要选中任何一个控件,否则打开的是对应控件的属性设置窗口,而非GUI界面的属性窗口。可以通过点击GUI界面中控件以外的网格区域来避免选中控件。)

    方法二:在对应的“.m”文件中输入相关代码。

    找到“.m”文件中的函数(function varargout = untitled2_OutputFcn(hObject, eventdata, handles))

    在该函数下面输入:

    set( hObject, 'name', '用户登录界面' ); % 其中的 hObject 替换成 gcf,效果依然成立
    % 即 set( gcf, 'name', '用户登录界面' );

     程序在运行时,就会得到相应的效果。

    效果图

     

    在GUI的“.m”文件中的OpeningFcn函数或者OutputFcn函数中添加以下代码:

    % 设置页面左上角的 Logo
    I = imread( 'Logo.jpg' ); % Logo.jpg为指定的图标
    javaImage = im2java( I );
    newIcon = javax.swing.ImageIcon( javaImage );
    figFrame = get( handles.figure1, 'JavaFrame' ); % 取得Figure的JavaFrame
    figFrame.setFigureIcon( newIcon ); % 修改图标

     本问题参考了网址:https://blog.csdn.net/hycwoaiyl/article/details/80113594

     

    五、GUI的Edit Text控件输入文本默认居中对齐,如何设置其中的文本对齐方式?

    双击该控件,打开其属性设置窗口(Property Inspector),找到“HorizontalAlignment”属性,就可以设置left(左对齐)、center(居中)、right(右对齐)。其他控件的对齐方式,设置方法相同

     

    六、界面之间的交互——GUI怎么从欢迎界面跳转到另一个主界面?

    “做了一个登录界面,当输入帐号密码正确无误后,点击登录会显示一个对话框‘登录成功’。再点击OK按钮会进入主界面,请问怎么实现进入主界面呢?是要做两个fig然后调用吗?还是其他什么办法呢? ”

    方法:做两个界面,例如第二个界面命名为GUI2, 设置OK的callback函数为关闭当前的GUI界面,打开第二个GUI界面。用delete或close关闭当前的GUI即可。

    具体地,在“登录”按钮的回调函数中写如下语句:

    GUI2; % 第二个界面(主界面)————推荐直接输入函数名的这种方式
    % 或者:
    % open('GUI2.fig');
    
    h = gcf; 
    close( h );

    然后保存,运行这个按钮界面,点击按钮就可以出现“GUI2” 界面。

     

    七、GUI界面,如何设置自定义菜单功能和按钮功能相同?

           具体地,在GUI界面中,设计了菜单栏中的一些功能,也设计了界面中一些功能按钮。期望菜单栏中的一些菜单项和功能按钮实现的功能一致。也就是说,有相同的回调函数。

           类似的问题:

    •        给多个控件的callback函数中添加同样的命令;
    •        多个控件执行相同的任务;
    •        一个控件调用另一个控件的回调函数;

           具体解决方法:

           方法一:(推荐)

           先编写好其中一个按钮的回调函数(Callback),例如一个按钮的 Tag 名为pushbutton_Enter,其回调函数为

    function pushbutton_Exit_Callback( hObject, eventdata, handles ) 
    %
    % 具体的代码在此省略
    %

           而对于那个相应的菜单(Tag名为menu_Enter),其回调函数可以为空代码,即具体的回调函数中除了函数名,不包含具体的调用代码。而是在GUI的XXX_OpeningFcn()或者XXX_OutputFcn()函数中插入下面的两行代码完成设置(XXX为GUI名):

    tempEnterCallback = get( handles.pushbutton_Enter, 'Callback' );
    set( handles.menu_Enter, 'Callback', tempEnterCallback );
    % 解释:
    % 先用get()函数获取到第一个控件的Callback属性,
    % 再利用set()函数将第二个控件的Callback属性设置为第一个控件的Callback

     

           方法二:

           先编写好其中一个按钮的回调函数(Callback),例如一个按钮的 Tag 名为pushbutton_Enter,其回调函数为

    function pushbutton_Exit_Callback( hObject, eventdata, handles ) 
    %
    % 具体的代码在此省略
    %

           而对于那个相应的菜单(Tag名为menu_Enter),其回调函数按如下代码所示即可:

    % --------------------------------------------------------------------
    function menu_Enter_Callback(hObject, eventdata, handles)    % 菜单栏中的“登录”项-callback
    % hObject    handle to menu_Enter (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    pushbutton_Enter_Callback( handles.pushbutton_Enter, eventdata, handles ); % 关键句
    % “登录”按钮的回调函数
    % 也即,只需在该菜单项的回调函数中加入类似的这句代码即可实现任务,去调用“登录”按钮的回调函数
    
    % 如法炮制,类似的情况也都可以这样操作

     

    八、运行GUI时,出现错误:Reference to non-existent field 'output'

    具体错误如下图:

    解析:

    出现这个错误,看看是不是 function XXX_OpeningFcn( hObject, eventdata, handles, varargin )  函数中(XXX为GUI名)的下面这几行代码发生了变化:

    handles.output = hObject;
    % Update handles structure
    guidata( hObject, handles ); 
    
    % 看看是不是程序的OpeningFcn()函数中的这几行代码发生了变化(被无意间删掉了,或者注释掉了)

    只要把上面这几句代码加入在OpeningFcn()函数中即可。

     

    九、全局变量

    “在函数或基本工作空间中,用global声明的变量为全局变量。”

    “声明了全局变量的函数或基本工作空间,共享该全局变量,都可以给它赋值。”

    “如果函数的子函数也要使用全局变量,也必须用global声明。”

    “全局变量要放在函数开始处声明。”

    ——以上四行引自罗华飞老师的《MATLAB GUI设计学习手记》,第三版,北航出版社,2014年。

     

    在进行MATLAB GUI设计时,有时不同的控件会用到同一个变量,这时就需要定义为全局变量。并且,只要用到全局变量的函数体内都需要用global进行声明。(在不同的子函数里面,只要使用全局变量,都需要用global  ‘Varname’ 声明。

    定义多个全局变量时,global 开头,变量名跟着后面,变量名之间用空格隔开即可。

     

    十、在设计GUI界面时,期望运行代码(具体某个算法)的同时,用一个进度条来展示算法的运行进度。

    (类似的问题:期望运行进度条的同时,后台也执行着其他代码。)

    如题。搜索浏览了一些网页资料和书籍。得出的结论:

    MATLAB是一种单线程运行结构后台程序依次顺序执行MATLAB不提供异步的功能给用户

    而我这里后台执行的算法代码是一个封装的整体,所以就不可能边执行算法程序,边用进度条展示出程序执行进度。

    如果用waitbar()做一个界面上的进度条,也只是给出一个虚假的进度,并且按照顺序执行的思路,也要先展示完进度条,后台才真正开始执行我的算法代码。所以这个想法暂时不能实现。

    (该问题也参考了网址:http://www.ilovematlab.cn/thread-315978-1-1.html(MATLAB GUI 在运行进度条的同时后台处理数据))

    附: waitbar()函数的官方文档:https://ww2.mathworks.cn/help/matlab/ref/waitbar.html?refresh=true

     

    十一、针对问题十,给出一个实例

    声明:该实例引自罗华飞老师的《MATLAB GUI设计学习手记》,第三版,北航出版社,2014年,第329页【例5.2】

    【例5.2】动态绘出频率从 1 到 10 依次变化的正弦波曲线,并用进度条显示绘图进度。

    set( gcf, 'visible', 'on' ); % 设置当前坐标轴用于绘制曲线,注意:gcf、gca创建的figure默认是隐藏的
    
    %% 创建置于屏幕前端的进度条,动态显示绘图进度
    h = waitbar( 0, '开始绘图...', 'WindowStyle', 'modal' ); 
    
    t = 0 : 0.01 : pi;%数据的横坐标
    
    for i = 1 : 10
        plot( t, sin(2*pi*i*t) ); % 绘制数据曲线
        waitbar(i/10, h, ['已完成' num2str(10*i) '%']); % 更新进度条的进度和标题
        pause(1);     % 延迟1秒
    end
    
    close( h ); % 关闭进度条
    

    新建一个.m脚本文件,将以上实例中的代码复制下来(这段代码不涉及GUI界面的设计)。运行这段代码,就会发现,一边在figure窗口绘制正弦曲线,前面的进度条也一边显示执行进度。

    但是你会发现,之所以能够实现上述效果,也是因为waitbar()嵌入在for循环内,相当于将绘制正弦曲线的工作划分成了十个阶段。正弦曲线绘制出一点,进度条也可以跟着更新一点。

     

    十二、自己绘制的GUI界面菜单栏保留MATLAB Figure窗口菜单栏的工具条

    在 GUI 的 XXX_OpeningFcn() 函数下插入下面这行代码:

    set( hObject, 'toolbar', 'figure' ); % 在菜单栏显示figure工具条的内容
    
    % 这样就可以在自己做的GUI界面继续使用工具条的一些功能


    十三、自定义GUI界面中菜单栏下的工具条

    上面的问题十二,是直接保留figure窗口的工具条。而本问题是自定义GUI界面的工具条。比如想在自己设计的GUI界面中使用到放大、缩小、3D旋转等功能。

    具体方法:

    GUI编辑界面的上方菜单栏‘Tools’——‘Toolbar Editor...’:

    进入之后(下图所示),左边有一些工具可供选择,双击想要的工具,或者单击选中想要的工具,再点击右边的‘Add’。并且可以设置工具的图标(CData)、Tag、Clicked Callback(回调函数)。

    本问题也可以参考下面的网址:

    Matlab GUI的菜单和工具栏常用操作——讲解自定义菜单栏和工具条

    GUI界面添加菜单栏工具栏问题(点击进入),该网址内二楼提供了一个PDF文档,可以说是比较好的入门学习资料。

     

    十四、怎样将制作的GUI界面定位在屏幕中央?

    运行GUI时,期望它出现在屏幕中央位置。提供以下四种方法:

    需要选择其中一种代码,将其放置在GUI界面的XXX_OpeningFcn()函数下即可。  推荐使用前三种实现,简洁实用。

    movegui( handles.figure1, 'center' ) % figure1为当前GUI界面的Tag
    movegui( gcf, 'center' ); % 将GUI界面放置在桌面中央
    movegui( hObject, 'center' ); % 将GUI界面放置在桌面中央
    set( hObject, 'Units', 'pixels' );
    figuresize = get( hObject, 'Position' );
    screensize = get( 0, 'screensize' ); % 获取屏幕大小
    set( gcf, 'outerposition', [(screensize(3)-figuresize(3))/2,(screensize(4)-figuresize(4))/2,figuresize(3),figuresize(4)]);
    

    该问题参考网址:一个GUI的问题,制作的界面怎样定位在屏幕中间?

       


    PS:在进行MATLAB GUI界面编程学习过程中,也发现了网上的一些不错的学习资料,现将网址链接罗列在下面:

    [1] MATLAB GUI的菜单和工具栏常用操作——讲解自定义菜单栏和工具条

    [2] GUI界面添加菜单栏工具栏问题——该网页内二楼提供了一个PDF文档(一个实例搞定MATLAB界面编程),也是一个比较好的入门学习资料。

    [3] 关于MATLAB GUI的一些经验总结

    [4] MATLAB GUI 新手入门——最基本的几个概念

    [5] MATLAB GUI 基础编程——MATLAB 中文论坛相关帖子整理——总结整理了MATLAB编程相关的一百多个问题,不局限于GUI设计。

     

    展开全文
  • matlabGUI之对话框,Matlab GUIDE使用总结Matlab GUI界面 Matlab GUIDE 使用总结--Matlab GUI 界面(zz) 去年做了一些关于 Matlab GUI 的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾...
  • 基于MATLAB GUI 界面设计解线性方程组
  • MATLAB GUI界面小总结

    2019-12-02 17:20:09
    MATLAB GUI界面小总结新建和运行添加背景图片点击按钮后运行其他程序在坐标区中绘图自动在表格中写入数字弹出式菜单使用方法可编辑文本的数据传递msgbox修改GUI名字时的一些问题 这几天做了一点关于matlab GUI界面的...
  • matlab gui界面编程实例

    2012-05-17 11:54:24
    matlab gui 界面编程实例 一个实例搞定MATLAB界面编程
  • matlabGUI界面编程示例

    2012-08-03 15:26:36
    matlab GUI 界面编程示例 (CS实验平台)
  • matlab gui界面设计教程

    2011-02-12 15:33:05
    matlab gui 界面 设计 教程 资料
  • 基于MATLAB GUI 界面设计解线性方程组
  • 基于MATLAB gui 界面数字图像处理系统,包含去噪、增强、FFT、小波变换等数十种基本功能,还包括人脸检测,图像滤镜处理等功能
  • Matlab GUI 界面编程:界面名称修改

    千次阅读 2019-12-06 11:37:21
    Matlab GUI 界面编程:界面名称修改 在界面的m文件中,找到界面的OpeningFcn函数 function day1_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % ...
  • matlab GUI界面编程总结

    2019-10-08 12:34:10
    去年做了一些关于Matlab GUI的程序,现在又要做... 创建Matlab GUI界面通常有两种方式: 1,使用 .m 文件直接动态添加控件 2. 使用 GUIDE 快速的生成GUI界面显然第二种可视化编辑方法算更适合写大型程序。一:创建GU...
  • matlabGUI界面设计

    2019-02-15 11:16:32
    MATLAB GUI 设计学习手记》源代码,书中所涉及的例题,均给出源代码,可以直接下载运行学习。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,076
精华内容 1,230
关键字:

matlabgui界面

matlab 订阅