Matlab GUI学习02:使用GUIDE开发图形界面程序
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的例子,来自官方文档
在命令行中输入
guide
打开GUIDE
.在布局中添加下面控件
通过修改控件的
String
属性,改变各个控件在屏幕上显示的字符串
保存文件,
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不会进行初始化,回调函数也不起作用.修改
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
的修改才有效.编写下拉菜单的回调函数:
右键点击控件>查看回调
>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}
代表列表被选项.编写按钮的回调函数
对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);
运行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编程
- 在在
GUIDE
菜单栏中找到菜单编辑器
->上下文菜单
,在图形化界面里编辑菜单.
- 给对应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
绘制GUI布局如下:
编写
界面鼠标点击事件
的回调函数
我们定义两个全局变量,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
赋值为0function figure_WindowButtonUpFcn(hObject, eventdata, handles) global ButtonDown ButtonDown = 0;
编写
界面鼠标移动事件
的回调函数
鼠标移动时,首先判断当前鼠标是否按下. 若鼠标被按下,则在移动前后位置处画出一条直线,并更新当前鼠标位置.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
运行App,效果如下所示
GUIDE编程实例04: 响应键盘事件的GUI编程
界面键盘按下事件
和界面键盘释放事件
对应的回调函数分别为WindowKeyPressFcn
和WindowKeyPressFcn
,可以通过figure对象的CurrentCharacter
查看当前操作的按键.(详情见官方文档)
GUIDE编程实例05: 显示时间的GUI编程
要想在MATLAB中显示时间,必然涉及多线程的编写,MATLAB的timer
对象可以实现多线程编程.
timer
对象常用的属性如下(详细参考官方文档)
TimerFcn
: 定时到达之后所执行的回调函数ExecutionMode
: 执行模式,其可选值如下表
执行模式 时间 Period 起点 'singleShot'
在此模式中,计时器回调函数仅执行一次. 因此,Period 属性没有任何作用.这是默认的执行模式. 'fixedRate'
在将计时器回调函数添加到 MATLAB 执行队列中后立即启动 'fixedDelay'
在计时器回调函数经过一段时滞(因 MATLAB 执行队列中出现延迟)后重新开始执行时启动 'fixedSpacing'
在计时器回调函数完成执行时启动 Period
: 定时周期,以秒为单位.
下面我们编写一个时钟程序如下:
- 编写GUI界面: 编写GUI界面如下: 静态文本框的
Tag
标签为'timeDisplay'
- 编写更新时间代码:
在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)));
- 运行App,效果如下所示: 动态显示当前时间.
pdf版本笔记的下载地址: Matlab GUI学习02_使用GUIDE开发图形界面程序(访问密码:3834)
Matlab GUI学习02:使用GUIDE开发图形界面程序相关推荐
- 在桌面Linux环境下开发图形界面程序的方案对比
在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...
- 怎么开发Linux图形界面程序,Linux下的图形界面编程
Linux下的图形界面编程 一.Qt和GTK+ 虽然Linux下的大多数开发是基于字符界面的,但在Linux环境下也可以开发出美观大方的图形界面.经过多年的发展,目前已经存在多种用于在Linux下开发 ...
- 怎样用C/C++开发图形界面(GUI)程序——点名器示例
怎样用C/C++开发图形界面(GUI)程序--点名器示例 原文链接:https://mp.weixin.qq.com/s/O9PXaibAyd__ONBBASYI_Q 仍旧是Via What系列,昨天 ...
- 第十五章 使用PyQt进行Python图形界面程序开发
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python部分代码样例 老猿Python重难点知识博文汇总 老猿Python博文目录 老猿 ...
- swing开发图形界面工具配置(可自由拖控件上去)
swing开发图形界面工具,eclipse swing图形化操作界面工具配置 1.有一个小功能要有一个界面,之前知道有一个 图形化界面的(就是可以往上面拖控件布局的工具)JBuilder,今天上午就下 ...
- java怎么开发图形界面_Java Swing 图形界面开发简介
1. Swing简介 Swing 是 Java 为图形界面应用开发提供的一组工具包,是 Java 基础类的一部分. Swing 包含了构建图形界面(GUI)的各种组件,如: 窗口.标签.按钮.文本框等 ...
- 二参数威布尔分布matlab,基于MATLAB的威布尔分布参数估计的图形界面设计
基于 MATLAB 的威布尔分布参数估计的图形界面设计 唐军军, 姜年朝, 宋军, 徐艳楠, 刘达 (总参第六十研究所, 江苏 南京 210016) 摘 要: 基于 MATLAB 平台, 设计了一款集 ...
- xmanager linux,教您用xmanager启动Linux上的图形界面程序-Go语言中文社区
对于习惯实体化的开发人员来说,还是界面化用着比较习惯,所以这就涉及到掌握使用Xmanager启动Linux上的图形界面程序,为了方便大家的使用,本集小编就详细的为大家讲解具体操作. 具体步骤如下: 1 ...
- Python编写的桌面图形界面程序实现更新检测和下载安装
在Python中我们有很多种方案来编写桌面图形用户界面程序,譬如内置的 Tkinter .强大的 PyQt5 和 PySide2 ,还有 wxPython .借助这些或内置或第三方的模块,我们可以轻松 ...
最新文章
- android 集成同一interface不同泛型_Dig101:Go之读懂interface的底层设计
- vue slot scope使用_20、slot插槽的用法
- android 左右卡片切换,3D卡片切换
- Opencv 图片 读取,显示,保存基本操作
- BFC 神奇背后的原理
- python画猫和老鼠_观察者模式(猫与老鼠的故事!)
- 随想录(源代码预处理命令)
- [修复] Eclipse – Java编译器级别与已安装的Java项目构面的版本不匹配
- 配置多个数据源,spring profile 多环境配置管理
- python常见的json对象对比方法(deepdiff、json_tools、jsonpatch)
- 二维码定位算法流程图
- 第二届中国计量大学ACM程序设计竞赛个人赛(同步赛)A -Little Gyro and Sort【签到题?】
- 城镇化进程中的粮食生产问题
- 【CS学习笔记】14、powerup提权的方法
- 服务器搭建系列之序章:总览,2022最新版本
- 沃尔玛中国将采用唯链雷神区块链追踪食品供应链
- R语言也可以进行ATAC数据的完整分析啦!
- 【软考 系统架构设计师】嵌入式系统⑤ 嵌入式系统开发与设计
- springmvc案例
- 《“边缘计算+”技术白皮书》发布!