pdf版本笔记的下载地址: Matlab GUI学习02_使用GUIDE开发图形界面程序(访问密码:3834)

Matlab GUI学习02:使用GUIDE开发图形界面程序

  • GUIDE
    • GUIDE简介
    • 使用GUIDE开发GUI
  • GUIDE数据管理
  • GUIDE编程实例
    • GUIDE编程实例01: 带有菜单栏的GUI编程
    • GUIDE编程实例02: 带有右键菜单的GUI编程
    • GUIDE编程实例03: 响应鼠标事件的GUI编程
    • GUIDE编程实例04: 响应键盘事件的GUI编程
    • GUIDE编程实例05: 显示时间的GUI编程

GUIDE

GUIDE简介

GUIDE(Graphical user interface design environment)可以使用图形化界面,使用拖拽的方式开发GUI.
在MATLAB命令行中输入guide就可以打开GUIDE,其基本界面如下:

在上边可以像VC一样拖拽式绘制GUI,点击右键菜单中的查看回调可以在源程序文件中修改其对应的回调函数.

使用GUIDE开发GUI

下面演示一个使用GUIDE开发GUI的例子,来自官方文档

  1. 在命令行中输入guide打开GUIDE.

  2. 在布局中添加下面控件

  3. 通过修改控件的String属性,改变各个控件在屏幕上显示的字符串

  4. 保存文件,GUIDE创建了两个文件: 一个图形文件simple_gui.fig和一个程序文件simple_gui.m. 但 App 无法响应,因为simple_gui.m不包含任何执行操作的语句.

    要在不打开GUIDE的情况下运行使用GUIDE创建的App,可以通过在MATLAB命令行中键入 App 的名称来执行其代码文件,如:

    simple_gui
    

    也可以使用 run 命令来运行该代码文件,如:

    run simple_gui
    

    不要尝试通过在GUIDE以外打开App的.fig文件来运行App.如果这样做,图窗会打开并显示就绪状态,但UI不会进行初始化,回调函数也不起作用.

  5. 修改easy_gui_OpeningFcn函数:
    xxx_OpeningFcn在GUI打开时被调用,进行初始化,是每个GUIDE生成的代码文件的第一个回调.
    把下面代码加入到easy_gui_OpeningFcn函数首部,创建用于绘图的数据.

    % Create the data to plot.
    handles.peaks=peaks(35);
    handles.membrane=membrane;
    [x,y] = meshgrid(-8:.5:8);
    r = sqrt(x.^2+y.^2) + eps;
    sinc = sin(r)./r;
    handles.sinc = sinc;
    % Set the current data value.
    handles.current_data = handles.peaks;
    surf(handles.current_data)
    

    这段程序生成了数据集peaks,membrane,和sinc,并将它们保存在handles结构体中.
    GUIDE程序中,全局变量一般存储在handles结构体中,在各个回调函数之间调用和修改. 语句guidata(hObject, handles);将对handles的修改绑定到hObject上,只有这样,对handles的修改才有效.

  6. 编写下拉菜单的回调函数:
    右键点击控件>查看回调>Callback查看对象的回调函数.
    在回调函数的头部添加下面代码:

    % Determine the selected data set.
    str = get(hObject, 'String');
    val = get(hObject,'Value');
    % Set current data to the selected data set.
    switch str{val};
    case 'peaks' % User selects peaks.handles.current_data = handles.peaks;
    case 'membrane' % User selects membrane.handles.current_data = handles.membrane;
    case 'sinc' % User selects sinc.handles.current_data = handles.sinc;
    end
    % Save the handles structure.
    guidata(hObject,handles)
    

    其中 str= cellstr(get(hObject,'String'))以元胞数组形式返回参数列表所有选项,get(hObject,'Value')返回被选项的序号,因此str{val}代表列表被选项.

  7. 编写按钮的回调函数
    Surf按钮的回调函数,添加下面内容:

    % Display surf plot of the currently selected data.
    surf(handles.current_data);
    

    Mesh按钮的回调函数,添加下面内容:

    % Display mesh plot of the currently selected data.
    mesh(handles.current_data);
    

    Contour按钮的回调函数,添加下面内容:

    % Display contour plot of the currently selected data.
    contour(handles.current_data);
    
  8. 运行App: 点击运行按钮运行 App,其效果如下:

GUIDE数据管理

gui数据使用handles结构体保存. 当GUIDE创建gui时,handles结构体即已经生成.

  • gui数据的查询: 可以通过handles.tag查询到对应的gui数据. 其中tag可以是自定义的对象属性,也可以是创建GUI时控件的Tag属性,通过该属性可以找到控件的句柄.
  • gui数据的保存: 使用guidata(hObject, handles);保存对gui数据的更改,在回调函数中修改handles后,只有执行此句才能将更改保存下来,在其他函数中调用.

GUIDE编程实例

GUIDE编程实例01: 带有菜单栏的GUI编程

GUIDE菜单栏中找到菜单编辑器>菜单栏,在图形化界面里编辑菜单栏.

  • 其中标签属性相当于图形控件的String属性,改变菜单按钮在界面上显示的值.
  • 其中标记属性相当于图形控件的Tag属性,改变菜单按钮的句柄.

菜单按钮可以看作一般的gui控件,其回调函数的写法和用法与一般的gui控件完全相同.

GUIDE编程实例02: 带有右键菜单的GUI编程

  1. 在在GUIDE菜单栏中找到菜单编辑器->上下文菜单,在图形化界面里编辑菜单.
  2. 给对应ui控件的UIContextMenu属性赋值为对应的右键菜单.
    figure控件的UIContextMenu赋值为globalMenu;给axes控件的UIContextMenu赋值为axesMenu.

    菜单栏菜单项一样,右键菜单菜单项也可以当作一般的UI控件来对待,其回调函数的写法和用法与一般UI控件完全相同.

GUIDE编程实例03: 响应鼠标事件的GUI编程

  • 界面鼠标点击事件对应的回调函数为WindowButtonDownFcn;可以通过SelectionType查看鼠标事件相应的鼠标键位(详情见官方文档)
    下表列出了可能的 SelectionType 值以及生成这些值的用户操作。

    对应的操作
    ‘normal’ 点击鼠标左键
    ‘extend’ 以下任一操作:
    1. Shift-点击鼠标左键
    2. 点击鼠标中键
    3. 同时点击鼠标左键和右键。
    ‘alt’ 下列任一操作
    1. Control-点击鼠标左键
    2. 点击鼠标右键。
    ‘open’ 双击任何鼠标按键。
  • 界面鼠标移动事件对应的回调函数为WindowButtonMotionFcn. 可以通过axes对象的CurrentPoint属性查看鼠标移动到的坐标.(详情见官方文档)(话说这个设定好智障,明明鼠标移动事件是绑定在figure对象上的,可是鼠标坐标只能在axes对象上得到)

下面我们编写一个能用鼠标进行绘图的App

  1. 绘制GUI布局如下:

  2. 编写界面鼠标点击事件的回调函数
    我们定义两个全局变量,ButtonDown记录鼠标当前是否被按下,pos1记录鼠标当前的位置.
    当鼠标被按下时,将ButtonDown赋值为1,并将当前鼠标位置记录在pos1

    function figure_WindowButtonDownFcn(hObject, eventdata, handles)
    global ButtonDown pos1; % ButtonDown记录鼠标是否按下,pos1记录鼠标到达的位置
    if strcmp(get(gcf, 'SelectionType'), 'normal')  % 判断按下的是否是鼠标左键ButtonDown = 1;pos1 = get(handles.axes1, 'CurrentPoint');
    end
    

    当鼠标被松开时,将ButtonDown赋值为0

    function figure_WindowButtonUpFcn(hObject, eventdata, handles)
    global ButtonDown
    ButtonDown = 0;
    
  3. 编写界面鼠标移动事件的回调函数
    鼠标移动时,首先判断当前鼠标是否按下. 若鼠标被按下,则在移动前后位置处画出一条直线,并更新当前鼠标位置.

    function figure_WindowButtonMotionFcn(hObject, eventdata, handles)
    if ButtonDown == 1pos = get(handles.axes1, 'CurrentPoint');line([pos1(1, 1) pos(1, 1)], [pos1(1, 2) pos(1, 2)], 'LineWidth', 4);pos1 = pos;
    end
    
  4. 运行App,效果如下所示

GUIDE编程实例04: 响应键盘事件的GUI编程

界面键盘按下事件界面键盘释放事件对应的回调函数分别为WindowKeyPressFcnWindowKeyPressFcn,可以通过figure对象的CurrentCharacter查看当前操作的按键.(详情见官方文档)

GUIDE编程实例05: 显示时间的GUI编程

要想在MATLAB中显示时间,必然涉及多线程的编写,MATLAB的timer对象可以实现多线程编程.

timer对象常用的属性如下(详细参考官方文档)

  • TimerFcn: 定时到达之后所执行的回调函数
  • ExecutionMode: 执行模式,其可选值如下表
    执行模式 时间 Period 起点
    'singleShot' 在此模式中,计时器回调函数仅执行一次. 因此,Period 属性没有任何作用.这是默认的执行模式.
    'fixedRate' 在将计时器回调函数添加到 MATLAB 执行队列中后立即启动
    'fixedDelay' 在计时器回调函数经过一段时滞(因 MATLAB 执行队列中出现延迟)后重新开始执行时启动
    'fixedSpacing' 在计时器回调函数完成执行时启动

  • Period: 定时周期,以秒为单位.

下面我们编写一个时钟程序如下:

  1. 编写GUI界面: 编写GUI界面如下: 静态文本框的Tag标签为'timeDisplay'
  2. 编写更新时间代码:
    xxx_OpeningFcn中加入如下代码: 创建timer对象,用来每一秒查询一次当前时间并展示在静态文本框中.

    handles.ht = timer(...,'ExecutionMode', 'FixedRate', ...'Period', 1, ...'TimerFcn', {@qureyTime, handles});
    start(handles.ht);
    

    编写timer对象的回调函数qureyTime

    function qureyTime(hObject, eventdata, handles)
    set(handles.timeDisplay, 'String', strcat('Current Time:', datestr(now)));
    
  3. 运行App,效果如下所示: 动态显示当前时间.

pdf版本笔记的下载地址: Matlab GUI学习02_使用GUIDE开发图形界面程序(访问密码:3834)

Matlab GUI学习02:使用GUIDE开发图形界面程序相关推荐

  1. 在桌面Linux环境下开发图形界面程序的方案对比

    在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...

  2. 怎么开发Linux图形界面程序,Linux下的图形界面编程

    Linux下的图形界面编程 一.Qt和GTK+ 虽然Linux下的大多数开发是基于字符界面的,但在Linux环境下也可以开发出美观大方的图形界面.经过多年的发展,目前已经存在多种用于在Linux下开发 ...

  3. 怎样用C/C++开发图形界面(GUI)程序——点名器示例

    怎样用C/C++开发图形界面(GUI)程序--点名器示例 原文链接:https://mp.weixin.qq.com/s/O9PXaibAyd__ONBBASYI_Q 仍旧是Via What系列,昨天 ...

  4. 第十五章 使用PyQt进行Python图形界面程序开发

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python部分代码样例 老猿Python重难点知识博文汇总 老猿Python博文目录 老猿 ...

  5. swing开发图形界面工具配置(可自由拖控件上去)

    swing开发图形界面工具,eclipse swing图形化操作界面工具配置 1.有一个小功能要有一个界面,之前知道有一个 图形化界面的(就是可以往上面拖控件布局的工具)JBuilder,今天上午就下 ...

  6. java怎么开发图形界面_Java Swing 图形界面开发简介

    1. Swing简介 Swing 是 Java 为图形界面应用开发提供的一组工具包,是 Java 基础类的一部分. Swing 包含了构建图形界面(GUI)的各种组件,如: 窗口.标签.按钮.文本框等 ...

  7. 二参数威布尔分布matlab,基于MATLAB的威布尔分布参数估计的图形界面设计

    基于 MATLAB 的威布尔分布参数估计的图形界面设计 唐军军, 姜年朝, 宋军, 徐艳楠, 刘达 (总参第六十研究所, 江苏 南京 210016) 摘 要: 基于 MATLAB 平台, 设计了一款集 ...

  8. xmanager linux,教您用xmanager启动Linux上的图形界面程序-Go语言中文社区

    对于习惯实体化的开发人员来说,还是界面化用着比较习惯,所以这就涉及到掌握使用Xmanager启动Linux上的图形界面程序,为了方便大家的使用,本集小编就详细的为大家讲解具体操作. 具体步骤如下: 1 ...

  9. Python编写的桌面图形界面程序实现更新检测和下载安装

    在Python中我们有很多种方案来编写桌面图形用户界面程序,譬如内置的 Tkinter .强大的 PyQt5 和 PySide2 ,还有 wxPython .借助这些或内置或第三方的模块,我们可以轻松 ...

最新文章

  1. android 集成同一interface不同泛型_Dig101:Go之读懂interface的底层设计
  2. vue slot scope使用_20、slot插槽的用法
  3. android 左右卡片切换,3D卡片切换
  4. Opencv 图片 读取,显示,保存基本操作
  5. BFC 神奇背后的原理
  6. python画猫和老鼠_观察者模式(猫与老鼠的故事!)
  7. 随想录(源代码预处理命令)
  8. [修复] Eclipse – Java编译器级别与已安装的Java项目构面的版本不匹配
  9. 配置多个数据源,spring profile 多环境配置管理
  10. python常见的json对象对比方法(deepdiff、json_tools、jsonpatch)
  11. 二维码定位算法流程图
  12. 第二届中国计量大学ACM程序设计竞赛个人赛(同步赛)A -Little Gyro and Sort【签到题?】
  13. 城镇化进程中的粮食生产问题
  14. 【CS学习笔记】14、powerup提权的方法
  15. 服务器搭建系列之序章:总览,2022最新版本
  16. 沃尔玛中国将采用唯链雷神区块链追踪食品供应链
  17. R语言也可以进行ATAC数据的完整分析啦!
  18. 【软考 系统架构设计师】嵌入式系统⑤ 嵌入式系统开发与设计
  19. springmvc案例
  20. 《“边缘计算+”技术白皮书》发布!

热门文章

  1. php虚拟主机配置途径和方法有哪些?
  2. 【vue】实现打印功能
  3. 各地的磁倾角_磁偏角的中国各地磁偏角
  4. 全智通A+——入库单价与出库成本不一致的原因。
  5. 生成PDF并转图片丢失中文显示的问题
  6. 今天要把之前安卓版的页面。做成ios版的。宝宝加油
  7. 把当前自己使用的ubuntu系统做成镜像
  8. python 大于10的前三个月最重要_给三个月前学 Python 的自己一封信
  9. SQL和PB安装时不弹出安装界面与QQprotect.exe
  10. Sqlserver With用法