前几天导师让我使用GUI做一个用户界面,学习了一段时间的matlab,但还没有使用过GUI,花了半天的时间补了补课,然后边做边查,这里对我之前不懂的东西做一个总结和记录。其中很多只是我个人的理解,如有不足或错误,欢迎批评指正。
说明:我使用的matlab版本为19a

GUI是什么

G=graphic图形, U=user用户, I=interface界面。故GUI就是对用程序编写系统的一个可视化的呈现,通过在GUI中点击/编辑不同的控件(如按钮,下拉框,单选框,复选框等等),可以实现一定的功能,从而让用户快速了解你写了一个什么样的程序。

GUI的打开

在matlab的命令行窗口输入“guide”,即可打开。

然后会弹出下面的界面。一般情况下,要是需要新建一个GUI,就选择“Blank GUI(Default)”,然后点击“确定”。也可以浏览一下下面的其他几个GUI,分别有不同侧重点的功能。(多试试,多练手,总会有收获的)


选择你需要的控件,如果要对每个控件的属性进行设置,可左键双击,然后设置或修改。其中有两项比较重要的,String(可以定义控件的名称,若对于列表框,则可定义其中的所有值)和Tag(我觉得类似于一个定位标志,其他控件对该控件的访问,就是通过Tag值来找到该控件的)。
设置好相应的控件及其属性,然后点击保存,此时就会存在两个文件(.fig和.m文件),一个用来显示各个控件的布局(即用户使用的界面),一个就是控件背后的程序。
现在只是选择了控件(骨架),但并没有程序(灵魂)来支撑其的实现。选中控件右击 —> 查看回调 —> callback。就可以进入到.m文件中进行具体的实现。callback为回调函数,也就是说当用户点击某一控件时,其对应的callback函数就会触发执行。

.m文件中的函数的简单说明

参考:GUI内函数调用顺序
(1)function varargout = gui1(varargin) %是主函数,也是入口函数
(2)function figure1_CreateFcn(hObject, eventdata, handles) %GUI控件创建时调用该函数,用户可以动态创建想要的控件
(3)function gui1_OpeningFcn(hObject, eventdata, handles, varargin) % 相当于控件的初始化函数,可以设置控件的属性值,或者读入varargin参数值
(4)function varargout = gui1_OutputFcn(hObject, eventdata, handles) %输出函数,设置该GUI的输出参数varargout 的数值
(5)function figure1_DeleteFcn(hObject, eventdata, handles) % 控件销毁前调用,做控件销毁前的保存清理工作
(6)function figure1_CloseRequestFcn(hObject, eventdata, handles) %关闭GUI时调用,GUI关闭前做清理工作
delete(hObject);

打开GUI时的调用顺序:(1)-> (2)->(3)->(4)->(1)
关闭GUI时的调用顺序:(6)->(4)->(5)->(6)
看网上说主函数轻易不要动,否则可能会引发不知名的错误(小白只能乖乖听话)。
此次我设计界面时,只使用了OpeningFcn函数,对一些空间的参数进行初始化。其他的我都没有改动。

hObject和handles区别

参考:hObject和handles区别

我觉得其中比较好的两种解释:
1、在MATLAB GUI中,数据分两种:GUI data和application data。 两种数据的存取机制是相同的,但是GUI data使用起来比较方便。
每一个GUI 图形界面都维持一个和自己的界面的图形(figure)相联系的一个handles数据结构,这个数据结构中容纳图形界面内所有控件(按钮、列表框、编辑框等)的句柄,相当于一个大的“容器”,里面存放了figure内所有控件的句柄。同时,handles结构也可以被figure内所有控件的回调函数访问,因为回调函数的输入参数中都有handles结构。此外,在控件的回调函数内可以把数据存储到handles结构中。
handles结构数据的取得和存储是通过guidata函数来实现的。
例如:在编辑框edit的回调函数内想获得编辑框的句柄,hObject可以,也可以用handles.edit,这两个值是一样的,没有区别,只不过获得控件句柄的方式不同而已:hObject是调用回调函数时直接传过来的,handles.edit是从handles结构中取得的。但是,在控件的CreateFcn函数中如果想访问控件,必须用hObject,而不能用handles.edit,因为这时控件还没被创建,其句柄还没有加入到handles结构中。

各控件的回调函数中,hObject的值是不一样的,分别代表调用回调函数的控件的句柄,而handles结构却是一样的。这种机制便于figure内的不同控件的回调函数内传递数据。
2、如果把figure对象当做一个大缸,而把其他对象例如AXES,BUTTON等等当做这个大缸里的小缸,那么handles就相当于这个大缸的句柄,可以用大缸的句柄来设置小缸的属性,例如handles.pushbutton。Hobject就相当于每一个小缸的句柄了,可以直接在响应控件的function后面加 set(hObject,‘property’,‘value’);
注: matlab中的结构体类型是不用定义的,可以直接赋值使用。并且也支持随时进行扩展添加新的项。
handles是一个结构体类型。支持将调用函数的结果进行保存,也支持自行定义新的变量。定义了的变量可以在整个GUI.m文件中使用,访问时使用“handles.变量名”即可。将handles中的变量的值改变后,要使用guidata(hObject, handles);对handles结构体进行更新。

我使用过的一些函数的介绍

get 用来查询图形对象(此处就是界面上的那些控件)的属性

参考:get函数

v = get(h)  % 返回 h 标识的图形对象的所有属性和属性值。v 是一个结构体,其字段名称为属性名称,其值为对应的属性值。h 可以是单个对象或 m×n 对象数组。
v = get(h,propertyName)  % 返回特定属性 propertyName 的值。使用时须用单引号将属性名引起来,例如,get(h,'Color')。
v = get(h,'default')  % 以结构体数组返回对象 h 上当前定义的所有默认值。字段名称为对象属性名称,字段值为对应的属性值。
v = get(groot,'factory')  % 以结构体数组返回所有用户可设置属性的出厂定义值。字段名称为对象属性名称,字段值为对应的属性值。

例:

其中popupmenu3即为某一列表框对应的"Tag"值,使用handles对其进行访问。

set 用来设置图形对象的属性

参考:set函数

set(H,Name,Value)  % 为 H 标识的对象指定其 Name 属性的值。使用时须用单引号将属性名引起来,例如,set(H,'Color','red')。如果 H 是对象的向量,则 set 会为所有对象设置属性。如果 H 为空(即 []),set 不执行任何操作,但不返回错误或警告。
set(H,NameArray,ValueArray) % 使用元胞数组 NameArray 和 ValueArray 指定多个属性值。要为 m 个图形对象中的每个图形对象设置 n 个属性值,请将 ValueArray 指定为 m×n 的元胞数组,其中 m = length(H),而 n 等于 NameArray 中包含的属性名的数量。
set(H,S)  % 使用 S 指定多个属性值,其中 S 是一个结构体,其字段名称是对象属性名称,字段值是对应的属性值。

为多个线条的线型设置为不同的值
将四个图形线条对象的 LineStyle 属性值分别设为不同的值。转置元胞数组值,使其拥有合适的形状。

P = plot(rand(4));
NameArray = {'LineStyle'};
ValueArray = {'-','--',':','-.'}';
set(P,NameArray,ValueArray)

为多个对象的多个属性设置不同值
将三个不同针状序列对象的 Marker 和 Tag 属性设置为不同值。值元胞数组的每一行对应于 h 中的一个对象且包含两个值,一个对应于 Marker 属性,一个对应于 Tag 属性。

x = 0:30;
y = [1.5*cos(x); 4*exp(-.1*x).*cos(x); exp(.05*x).*cos(x)]';
S = stem(x,y);
NameArray = {'Marker','Tag'};
ValueArray = {'o','Decaying Exponential';...'square','Growing Exponential';...'*','Steady State'};
set(S,NameArray,ValueArray)

对话框

uigetfile 文件打开对话框

参考:uigetfile

function [FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle,DefaultName)

FileName:返回的文件名
PathName:返回的文件的路径名
FilterIndex:选择的文件类型 即,你想的选择的文件是什么样的后缀名,当文件类型为多种时,使用大括号括起来
FilterSpec:文件类型设置
DialogTitle:打开对话框的标题
DefaultName:默认指向的文件名

如:读取图像

% read image
[imgfilename,pathname]=uigetfile({'*.bmp;*.jpg;*.png;*.jpeg;*.tif'},'select a image');
str=[pathname imgfilename];  % 可以将两个字符串连接起来if imgfilenameimgdata = imread(str);figure('name','Original image');imshow(imgdata); handles.imgfilename = imgfilename;handles.imgdata = imgdata;
end
guidata(hObject, handles);

uiputfile 文件保存对话框

调用格式与uigetfile类似

msgbox 消息对话框 输出提示信息

h = msgbox(Message)
h = msgbox(Message,Title)
h = msgbox(Message,Title,Icon)

message :显示的具体信息。
title :确定对话框标题。
Icon :是对话框上的图标,有“help”、“warn”、“error”、“custom”或none等值

inputdlg 输入对话框

参考:inputdlg

answer = inputdlg(prompt)   创建包含一个或多个文本编辑字段的模态对话框,并返回用户输入的值。返回值是字符向量元胞数组的元素。元胞数组的第一个元素对应于对话框顶部编辑字段中的响应。第二个元素对应于下一个编辑字段中的响应,依此类推。
answer = inputdlg(prompt,dlgtitle)   指定对话框的标题。
answer = inputdlg(prompt,dlgtitle,dims)   当dims是标量时,指定每个编辑字段的高度。当 dims 是数组时,每个数组元素中的第一个值设置编辑字段的高度。每个数组元素中的第二个值设置编辑字段的宽度。

如:指定编辑多个字段时,需要用大括号括起来

还有很多其他的对话框:(等需要的时候再一一了解)
dialog(‘PropertyName’,PropertyValue,…);创建一个对话框
errordlg:显示错误信息
helpdlg:显示帮助信息
listdlg:以列表框的形式显示信息
printdlg:打印对话框
printpreview:显示打印预览对话框
questdlg:询问对话框
uigetdir:取得文件夹对话框
uigetpref:也就是常见的yes、no、cancel对话框
uiopen:打开文件对话框,类似uigetfile
uisave:存储工作空间内的变量的对话框
uisetfont:设置字体特性的对话框
uisetcolor:颜色设置对话框
waitbar:显示等待进度条
warndlg:显示警告信息的对话框
以上对话框的使用可以用helpdlg ***来查询。

对于列表框控件

我们使用列表框控件往往是为了让用户选择一些参数的具体的值,因此,设置时的可选择值往往不止一个。
例如:

可选择的这些值都保存在列表框控件的"String"属性中。该控件中的"Value"属性中的值与"String"中的每一行是一一对应的。例如,当"Value"的值为1时,“String"中选中的就是"Centroid-Area”,当"Value"的值为5时,“String"中选中的就是"Centroid-Eccentricity”。
因此可以根据"Value"的值来判断当前列表框选中的是参数的哪个值。以便进行其他的操作。

先总结这么多,以后用到其他的东西再进行学习总结。

matlab——GUI界面设计的相关问题相关推荐

  1. Matlab GUI界面编程小白学习笔记

    某个天朗气清的下午,老师给我布置了一个Matlab GUI 界面设计的任务,然后欢天喜地回家结婚去了,留我在美好的假期里继续孤零零地在学校里耕耘.好的,在此先祝贺老师新婚快乐,百年好合.然后咱们开始从 ...

  2. 基于MATLAB的数字图像处理系统GUI界面设计

    基于MATLAB的数字图像处理系统GUI界面设计 图像读入 从图形文件中读入图像 imread Syntax: A = imread(filename, fmt) filename:指定的灰度或彩色图 ...

  3. MATLAB GUI界面编程——一些细节问题

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

  4. MATLAB GUI 界面编程——常见问题和解决方法

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

  5. matlab gui期末设计,MATLABGUI课程设计期末大作业湖南理工学院

    MATLABGUI课程设计期末大作业湖南理工学院 <数字图像处理>期末大作业暨课程考核报告姓名:邓巧灵学号:24112200002序号:02湖南理工学院南湖学院2014 年 6 月2目录一 ...

  6. 【Qt设计开发】GUI界面设计开发

    文章目录 一.Qt简介和下载安装 二.Qt入门 2.1 创建第一个项目 2.2 快捷键和命名规范 2.3 Qt项目和VS2022项目相互转换 三.Qt基础 3.1 Qt对象树和窗口坐标系概念 3.2 ...

  7. 基于MATLAB GUI界面的串口小助手

    文章目录 序 一.简介 二.步骤 1.创建一个空白GUI界面 2.拖入组件,进行搭建 3.编辑m文件 总结 序 将单片机传感器采集到的数据直接输入MATLAB进行运算分析,不仅适合仿真,在实际测试中, ...

  8. [java/初学者/GUI编程]GUI界面设计——界面组件类

     前言 GUI,即图形用户界面,其英文全称是Graphics User Interface. 它是基于图形的界面,windows就是一个图形用户界面的操作系统,而DOS是基于命令提示符的操作系统,GU ...

  9. Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习、深度学习、大数据、云计算等)推荐系统(包括语音生成、识别等前沿黑科技)

    Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习.深度学习.大数据.云计算等)推荐系统(包括语音生成.识别等前沿黑科技) 导读 基于Python的GUI界面设计的一套 ...

最新文章

  1. 暴力裁员?小米回应来了,网友表示没毛病!
  2. 关于使用eclipse maven UpdateProject时报错,无法更新本地仓库的问题解决方案
  3. 查看apk的签名信息和签名文件的信息
  4. 深入理解Spring AOP思想
  5. 编程之美- 中国象棋将帅问题
  6. Tornado-Secure cookie and Session
  7. 【渝粤教育】电大中专消费者心理学基础 (2)作业 题库
  8. 触发器及其应用实验报告总结_2020年中考总复习: 光现象、透镜及其应用知识点总结...
  9. 移植php,PHP交叉编译和移植
  10. 在不同场景里,用户使用手机时的认知水平和操作绩效
  11. 小案例:利用Python实现图片上下、左右翻转
  12. 盘点2008年值得一看的电视剧
  13. 加密文档的三种基本方法
  14. Java中Switch选择语句的用法
  15. 关于软件界面设计、控件颜色搭配、一些实用建议(偷懒技巧)总结——针对C# WinForm/WPF技术
  16. c++二叉树打印(只为美观)
  17. 联表查询求和的一些问题
  18. 原型模式prototype-发送邮件实例
  19. Python的@装饰器是干什么用的?
  20. android怎么用edittext得到日期_minon蜜浓保湿乳液怎么用批号看生产日期?minon蜜浓保湿乳液保质期有多长时间?...

热门文章

  1. Opencv之多目标追踪(基于Dlib库)
  2. html5废弃html4什么,HTML5废弃的标签及属性
  3. 【拼题A】 520 钻石争霸赛 2023 题解
  4. mysql删除重复的数据保留一条
  5. HTML/CSS布局—Flex布局(弹性布局)
  6. 【项目管理】项目成本管理
  7. [运维] 在CentOS7系统上安装部署wok
  8. 计算机课程思政元素,《数据结构》课程思政元素的设计
  9. 三跨考研浙江大学计算机,浙江大学交互设计考研经历分享(原来跨考这么受欢迎)...
  10. Docker pull 失败,更换国内源daocloud