本书在《MATLAB GUI设计学习手记》(第3版)的基础上,结合MATLAB 2018b的新特性,完善了全书知识架构,突出了GUI设计重点,对读者经常遇到的38个问题做了透彻的解答,提炼出13个专题并做了详尽的介绍,还对多达113个经典例题做了全面细致的讲解。全书由浅入深,全面系统地介绍了GUI设计的基础知识和高阶技巧,旨在使读者在较短时间内熟练掌握GUI设计的精要所在。
本书首先介绍了GUI设计的预备知识;然后详细讲解了GUIDE对象的属性以及两种创建APP的方法:采用纯代码创建和采用GUIDE 创建;之后针对新一代GUI开发平台App Designer,深入讲解了使用App Designer设计GUI的方法与步骤、重点与难点;同时介绍了串口编程等相关知识。书中穿插大量图表与注释,方便读者学习。
本书适合需要在短时间内掌握MATLAB GUI设计的初学者,也可作为高等院校相关专业师生、科研与工程开发人员的参考手册。
畅销11年的MATLAB GUI经典教程的新升级版,前3版已获进5万读者的认可,助力众多读者获得课程设计和毕业设计的“优+”。新增 “采用App Designer设计APP”一章,详细讲解了如何采用新一代GUI设计平台App Designer设计APP。基于MATLAB 2018b版本。书中代码和数据可以通过论坛、北航科技图书公众号免费下载。
本书在第3版的基础上,主要做了如下改进:
① 新增了“采用App Designer设计APP”一章,详细讲解了如何采用新一代GUI设计平台App Designer设计APP。
② 新增了“MATLAB基本编程步骤”专题,详细介绍了高效、高质量编程的必需步骤。
③ 新增了“字符数组与字符串数组”一节,详细介绍了字符数组与字符串数组,以及与字符处理相关的函数。
④ 大量使用表格,使本书内容更加直观易懂,删除了部分应用面偏窄的章节、专题、例题。
⑤ 进一步规范了代码的结构,增强了可读性,优化了代码的效率。
⑥ 代码注释率达到了90%以上,代码更加通俗易懂。
本书共8章,每章由以下4节内容组成:知识点归纳、重难点讲解、专题分析和精选答疑。知识点归纳全面介绍了本章的内容与知识点,容易理解错的知识点用【注意】标明,个别地方配以典型例题讲解;重难点讲解简要概括了本章的重点和难点,便于读者重点学习掌握;专题分析系统全面地对某个知识点进行专门讲解,达到一针见血的目的;精选答疑筛选出读者在学习过程中经常遇到的问题,配合习题进行解答。本书包含大量例题,建议读者先自行完成例题,然后参考例题解析,配合代码注释,分析比较程序代码。这样边学边练,可以进一步牢固地掌握GUI设计技巧和方法。
第1章:GUI设计预备知识。主要介绍了 MATLAB的基本程序元素、几种设计中经常使用的数据类型和矩阵操作函数,以及程序设计的5种句型(for、 while循环结构,if、 switch条件分支结构和try catch结构)。之后以专题形式,分别详细讲解了编程步骤、编程风格、代码优化以及编程技巧等内容。
第2章:文件I/O。主要介绍了文件I/O 操作的相关函数,分高级文件I/O 和低级文件I/O 两部分。高级文件I/O 介绍了读写MAT、ASCI、TXT、 Excel、图片和音频等文件的方法及相关函数;低级文件I/O 介绍了读写二进制和文本文件的方法及相关函数。以专题形式全面讲解了读写文本文件的技巧与方法。
第3章绘图简介。主要介绍了与GUI设计密切相关的绘图工具函数。绘图函数常用于GUI设计中的数据可视化。
第4章:句柄图形系统。主要介绍了GUI对象的概念及其操作函数,各种GUI对象的纯代码创建方法、属性及含义。之后以专题形式,全面讲解了超文本标记语言(HTML)在MATLAB中的应用、表格设计及坐标轴设计。本章是GUI设计的重点内容,需要熟练掌握。
第5章:预定义对话框。介绍了 GUIDE可调用的所有预定义对话框,包括公共对话框和自定义对话框。预定义对话框使得GUI设计更加直观、灵活。
第6章:采用 GUIDE建立GUI。本章首先介绍了采用 GUIDE 建立GUI的方法、GUI的M 文件构成、回调函数的分类以及回调函数的编写方法,然后举例介绍了 GUIDE环境下GUI组件的使用方法。最后以专题形式,系统讲解了GUI对象之间的数据传递方法以及回调函数的应用实例。通过本章的学习,读者可以设计出精美的GUI界面,实现复杂的功能。本章是GUI设计的重点内容,需要熟练掌握。
第7章:串口编程。介绍了GUI设计中串口的使用方法。
第8章:采用App Designer设计APP。系统地介绍了App Designer对象以及各对象的功能、使用方法;以重难点讲解的方式详细介绍了数据、函数的传递方法;以专题分析的方式介绍了两窗口APP以及复杂多窗口APP的设计方法与关键点;本章同时介绍了如何将GUIDE设计的APP导入App Designer进行再开发。最后以精选答疑的方式将本章知识点串联讲解,使读者的认识更为深刻。本章知识体系独立,可单独学习。
最后,附录部分列出了常用的GUI设计相关函数,供读者参考查询。
本书在编写过程中,参考了大量的网络资料,也得到了math、lyqmath、makesure5、lskyp、谢中华、MATLAB学徒、midland等很多MATLAB中文论坛(http://www.ilovematlab.cn)上的朋友的热心帮助,没有他们的帮助,本书会缺少很多闪光点。感谢 MATLAB中文论坛提供的珍贵资源!
另外,我要特别感谢我的妻子王一,在创作本书的过程中,她在背后给予我无微不至的照顾和鼓励。
由于篇幅有限,还有很多案例不能一一在书中呈现,我们在MATLAB中文论坛设立了在线交流版块,在版块里补充了一些案例,详见https://www.ilovematlab.cn/forum-155-1.html。
读者可以登录北京航空航天大学出版社的官方网站,选择“下载专区”→“随书资料”下载本书配套的程序代码。也可以关注“北航科技图书”公众号→回复“3205”获得本书的免费下载链接。下载过程中遇到任何问题,请发送电子邮件至goodtextbook@126.com 或致电010-82317738咨询处理。
由于作者水平有限,加之时间仓促,书中难免有不足与疏忽之处,敬请读者批评指正。本书勘误网址:http://www.ilovematlab.cn/thread-295336-1.html。
邵 斌
2019年10月于重庆大学
罗华飞,罗华飞,哈尔滨工程大学通信与信息系统硕士,目前从事IT项目管理工作。为《MATLAB GUI设计学习手记》(1版、2版、3版)的作者,具有丰富的MATLAB GUI设计开发经验。
邵斌, 重庆大学测控技术与仪器学士,重庆大学光学工程博士,光电技术及系统教育部重点实验室研究人员。主要从事微波雷达结构健康监测、激光技术、光纤传感、特种测试仪器设计与研发等方面的研究。先后参与国家自然科学基金、中国航发科技创新项目、重庆市重大仪器专项等6项省部级项目。具备丰富的MATLAB GUI设计开发经验,设计发开的核动力设备健康监测系统、航空发动机参数测量系统已进入工程示范推广。
第1章 GUI设计预备知识 1
1.1 知识点归纳 1
1.1.1 基本程序元素 1
1.1.2 数据类型 7
1.1.3 矩阵操作 40
1.1.4 程序设计 49
1.2 重难点讲解 61
1.2.1 矩阵、向量、标量与数组 61
1.2.2 数据类型转换 62
1.3 专题分析 65
专题1 MATLAB基本编程步骤 65
专题2 编程风格 67
专题3 代码优化 71
专题4 M 文件编程小技巧 75
1.4 精选答疑 82
问题1 单元数组占用的内存空间如何计算 82
问题2 如何生成指定格式的常矩阵、字符串 83
问题3 如何生成随机矩阵 85
问题4 如何查找或删除数据中满足条件的元素 87
问题5 如何给数组元素排序 89
问题6 如何从文本中查找数值 92
第2章 文件I/O 93
2.1 知识点归纳 93
2.1.1 高级文件I/O操作 93
2.1.2 低级文件I/O操作 110
2.2 重难点讲解 123
2.2.1 二进制文件与文本文件 123
2.2.2 sprintf与fprintf函数 124
2.2.3 fscanf与textscan函数 125
2.2.4 Excel文件操作 125
2.2.5 图像数据的操作 125
2.2.6 低级文件I/O操作 126
2.3 专题分析 126
专题5 MATLAB读写文本文件 126
2.4 精选答疑 136
问题7 如何提取Excel文件中的数据信息 136
问题8 如何由图像生成字符矩阵 139
问题9 如何循环播放WAV音乐,并可以倍速/慢速播放、暂停/继续播放和停止播放 141
问题10 如何读取文本和数值混合的文件中的数据 144
问题11 如何将十六进制数转换为float值 144
第3章 绘图简介 146
3.1 知识点归纳 146
3.1.1 常用的绘图函数 146
3.1.2 绘图工具 155
3.2 重难点讲解 158
3.2.1 二维绘图的相关函数 158
3.2.2 三维绘图的相关函数 159
3.3 精选答疑 159
问题12 如何绘制几何曲线,例如矩形、圆、椭圆、双曲线等 159
问题13 如何绘制数据的统计图 161
问题14 如何绘制特殊的字符、表达式 161
问题15 如何绘制网格图 162
第4章 句柄图形系统 163
4.1 知识点归纳 163
4.1.1 句柄图形对象 164
4.1.2 句柄图形对象的基本操作 165
4.1.3 句柄图形对象的基本属性 175
4.1.4 根对象 179
4.1.5 图形窗口对象 183
4.1.6 坐标轴对象 194
4.1.7 核心图形对象 200
4.1.8 uicontrol对象 221
4.1.9 hggroup对象 226
4.1.10 按钮组与面板 229
4.1.11 自定义菜单与右键菜单 231
4.1.12 工具栏与工具栏按钮 239
4.1.13 uitable对象 247
4.2 重难点讲解 257
4.2.1 句柄式图形对象的常用函数总结 257
4.2.2 Figure对象的几个重要属性 258
4.2.3 Axes对象的几个重要属性 259
4.2.4 Line对象的几个重要属性 260
4.2.5 text对象的几个重要属性 261
4.2.6 uitable对象的几个重要属性 261
4.2.7 uicontrol对象中的text控件与核心图形对象中的text对象的比较 262
4.2.8 对象的Tag值与句柄值的概念比较(对GUIDE创建的GUI而言) 262
4.2.9 uimenu与uicontextmenu对象 262
4.3 专题分析 262
专题6 超文本标记语言(HTML)在MATLAB中的应用 262
专题7 表格设计 273
专题8 坐标轴设计 277
4.4 精选答疑 282
问题16 如何创建满足要求的line对象 282
问题17 如何创建动态的GUI对象 283
问题18 如何为窗口设计背景图片 285
问题19 如何定制窗口的菜单 286
问题20 如何设计窗口菜单并编写回调函数 287
问题21 如何采用UI控件实现简易的时钟 288
问题22 如何实现文字的水平循环滚动效果 290
问题23 如何构造和使用hggroup对象 293
问题24 如何使窗口最大化、最小化、置顶和居中,如何在窗口中更换图标 295
问题25 怎样利用Uitable对象在列名、行名或单元格中输入上下标和希腊字母 296
问题26 如何更改菜单项的字体大小,如何设置菜单项的字体颜色 296
问题27 如何逐个输出坐标轴内的图形到单独的图片中 297
问题28 如何将多幅图片显示到同一个坐标轴 299
第5章 预定义对话框 301
5.1 知识点归纳 301
5.1.1 文件打开对话框(uigetfile) 302
5.1.2 文件保存对话框(uiputfile) 304
5.1.3 颜色设置对话框(uisetcolor) 305
5.1.4 字体设置对话框(uisetfont) 306
5.1.5 页面设置对话框(pagesetupdlg) 307
5.1.6 打印预览对话框(printpreview) 307
5.1.7 打印设置对话框(printdlg) 307
5.1.8 进度条(waitbar) 307
5.1.9 菜单选择对话框(menu) 312
5.1.10 普通对话框(dialog) 314
5.1.11 错误对话框(errordlg) 314
5.1.12 警告对话框(warndlg) 317
5.1.13 帮助对话框(helpdlg) 318
5.1.14 信息对话框(msgbox) 319
5.1.15 提问对话框(questdlg) 320
5.1.16 输入对话框(inputdlg) 321
5.1.17 目录选择对话框(uigetdir) 322
5.1.18 列表选择对话框(listdlg) 322
5.2 重难点讲解 323
5.2.1 uigetfile 323
5.2.2 uiputfile 324
5.2.3 waitbar 324
5.2.4 msgbox 324
5.2.5 questdlg 324
5.2.6 inputdlg 324
5.2.7 listdlg 325
5.3 专题分析 325
专题9 预定义对话框在GUI设计中的应用 325
5.4 精选答疑 329
问题29 如何制作一个嵌套到当前窗口内的进度条 329
问题30 如何制作文件浏览器 332
问题31 如何制作一个颜色选择器 334
第6章 采用GUIDE建立GUI 336
6.1 知识点归纳 336
6.1.1 GUIDE界面基本操作 337
6.1.2 GUI的M 文件 346
6.1.3 回调函数 355
6.1.4 GUI跨平台的兼容性设计 358
6.1.5 断点调试和代码性能分析器 359
6.1.6 采用GUIDE创建GUI的步骤 359
6.1.7 触控按钮(Push Button) 360
6.1.8 静态文本(Static Text) 362
6.1.9 切换按钮(Toggle Button) 364
6.1.10 滑动条(Slider) 366
6.1.11 单选按钮(Radio Button) 368
6.1.12 可编辑文本(Edit Text) 369
6.1.13 复选框(Check Box) 371
6.1.14 列表框(Listbox) 373
6.1.15 弹起式菜单(Pop up Menu) 374
6.1.16 按钮组(Button Group) 376
6.1.17 面板(Panel) 378
6.1.18 表格(Table) 379
6.1.19 坐标轴(axes) 384
6.2 重难点讲解 386
6.2.1 回调函数中的数据传递 386
6.2.2 GUI界面之间的数据传递 387
6.2.3 KeyPressFcn与CurrentCharacter 388
6.2.4 WindowButtonDownFcn、Callback与SelectionType 388
6.3 专题分析 388
专题10 GUI对象之间的数据传递 388
专题11 回调函数的应用实例 393
6.4 精选答疑 405
问题32 如何动态修改List Box的选项 405
问题33 如何动态修改Pop Up Menu的选项 407
问题34 如何实现图片的局部放大预览 411
第7章 串口编程 414
7.1 知识点归纳 414
7.1.1 串口概述 414
7.1.2 串口对象的属性 416
7.1.3 串口的基本操作 420
7.1.4 串口I/O函数汇总 423
7.2 重难点讲解 424
7.2.1 串口对象的创建 424
7.2.2 重要的串口操作函数 424
第8章 采用App Designer建立APP 425
8.1 知识点归纳 425
8.1.1 App Designer简介 426
8.1.2 启动 App Designer 427
8.1.3 17种常用对象 431
8.1.4 2种容器对象 449
8.1.5 1种图窗工具对象 452
8.1.6 10种仪器对象 453
8.1.7 回调函数表 455
8.1.8 9种常用对话框 456
8.2 重难点讲解 468
8.2.1 获取对象的属性值 468
8.2.2 私有属性的传递 470
8.2.3 公共属性的传递 473
8.2.4 私有函数的调用 474
8.2.5 公共函数的调用 476
8.2.6 通过脚本访问APP 478
8.2.7 APP界面添加背景图片 478
8.2.8 3种APP打包方式 479
8.2.9 浅谈App Designer代码结构 488
8.3 专题分析 491
专题12 使用App Designer设计两窗口APP 491
专题13 使用App Designer设计多窗口APP 499
8.4 精选答疑 514
问题35 如何使用App Designer设计数字信号滤波器 514
问题36 如何使用App Designer设计数字图像处理器 519
问题37 如何采用纯代码创建APP 525
问题38 如何将GUIDE 创建的APP迁移至App Designer 529
附 录 MATLAB GUI设计常用函数 533