MATLAB(3)——GUI界面设计入门
作者:桂。
时间:2017-03-01 18:43:35
链接:http://www.cnblogs.com/xingshansi/articles/6485688.html
声明:转载请注明出处,谢谢。

前言
|
本文为MATLAB系列第三篇,主要是自己学习GUI界面设计的记录,此文后续会不定期更新。写本文的初衷是: 如何让一个不懂MATLAB的人员,可以进行一些操作,或者设定一些参数? 文章内容主要为自己的学习笔记,内容多有借鉴他人,最后把链接一并附上。 |
一、搭建最基本的GUI
本节通过两个例子进行论述,分别介绍GUI基本操作,即数值运算、数据导入、图形绘制等功能的GUI实现。
A-加法器
首先上效果图:

输入两个数值,点击Add!,便可显示结果,下面开始逐步介绍。
- GUI新建
常用的新建GUI方法有两个:
- Command Window输入guide—>Create New GUI;
- Home—>New—>Graphical User Interface;
注意:勾选“Sace new figure as:”,可选择存储路径,并对文件命名。

这里我们选择默认的“Blank GUI(Default)”,点击“OK”,便可进入, 本文主要用到以下几个选框:

- GUI框架搭建
本文为基础内容,框架内修改的主要是
点击需要添加的选框至面板中,双击选框,特性中:

其中
String:显示的名称;
Tag:标签,主要用于程序编写时,对变量进行定位;
常用:
position:指示空间在figure中的位置
font**:字体相关属性
string:相当如VB中的caption,就是显示在控件上的文字
tag:控件的唯一标识符,相当于ID,我们需要tag来指定某一个空间
因此,我们只需要设定参与操作的选框tag;对于不涉及操作、仅仅作为显示的选框,其tag我们可以默认。
分析加法器,我们总共需要的选框:

其中,涉及操作的有:
两个输入(两个编辑文本框) + 一个执行加法运算的开关(一个确定按钮)+结果显示(一个静态文本框)。
设置完成的效果图:

点击“保存”,此时便出现.m和.fig两个文件,加法器的GUI框架搭建完毕。
- GUI对应代码完善
步骤一:设定tag、String等参数;
首先是回调函数的定位(如果已经退出GUI编辑框,可Command Window输入guilde进入):

选中并右键—>Viwe Callbacks—>Callback,即可打开对应的函数模块。
对应提取数据的代码(提出为字符,需要进行str2num的转换)
a = get(handles.input_a,'String');%String的S大写
假设两个输入框的String分别设为0(无输入默认显示0),tag分别设定为:
- input1_editText,input2_editText
OK按钮重命名:String设置为:Add! 对应tag为:
- add_pushbutton
结果的String设为0,对应tag设为:
- answer_staticText
步骤二:读取输入参数
打开第一个输入框,函数模块初始为
function input1_editText_Callback(hObject, eventdata, handles)
% hObject handle to input1_editText (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'String') returns contents of input1_editText as text
% str2double(get(hObject,'String')) returns contents of
% input1_editText as a double
编辑回调函数,修改为:
% handles 包含figure中所有图形对象句柄的结构体,如果我们想引用tag为mytag的控件,使用handles.mytag
% set/get 函数是用来设置/获取某个控件属性
% 使用get命令获取第一个加数,并将它转换成数值
input = str2num(get(hObject,'String')); % string属性是字符串,所以必须转换成数值 % 检验输入是否为空,是则将它置为0
if (isempty(input))
set(hObject,'String','0')
end % 保存handles结构体,只要在handles结构体有改变时,才需要保存
guidata(hObject, handles); % 这里由于handles没有改变,故这里其实没有必要,建议在所有Callback最后都添加该命令,此处为将参数设定为GUI变量,可全局调用。
第二个输入框同第一个输入框的操作相同;
步骤三:输出结果的显示
关联控制键,并将结果赋给对应的tag,初始的回调函数:
% --- Executes on button press in add_pushbutton.
function add_pushbutton_Callback(hObject, eventdata, handles)
% hObject handle to add_pushbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
修改后:
a = get(handles.input1_editText,'String');
b = get(handles.input2_editText,'String');
% a和b是字符串变量,我们需要使用str2double函数将其转换为数值
% 然后才能相加,否则字符串是没法相加的
total = str2num(a) + str2num(b); % 格式转换,转换为数值
% 由于string属性是字符串,所以必须将两个数的和转换为字符串
c = num2str(total); % 转换为字符串
% 将结果赋值给answer_staticText空间的string属性,于是就可以显示结果了
set(handles.answer_staticText,'String',c);
guidata(hObject, handles); % 更新结构体
至此,完成了GUI代码的完善。
- GUI运行
GUI的运行主要分为三种方式。
方式一:Current Directory运行.m文件
同普通程序运行一致,运行结束即弹出GUI画框,按要求操作即可。
方式二:GUI界面run
Command Window输入guide,进入GUI编辑界面,点击右上角的
,即弹出GUI界面。
方式三:Command Window运行GUI文件名
例如有GUI程序:example.fig,切换到该文件的目录下,在Command Window输入example,回车运行,即弹出GUI界面。
|
自己实现了GUI零的突破,希望后面掌握相关技巧后,来一个加法器的GUI升级。 ——记录此处,提醒自己 |
B-语音增强
学习GUI,实现最基本的功能,读取一段语音信号(co-channel),并对带噪信号进行归一化自适应滤波(NLMS),实现语音信号增强。这里给出读取文件的指令,
降噪以及NLMS等算法的实现,具体参考自适应滤波。本文不再展开论述,感兴趣的朋友,可以拿这个作为小练习(●'◡'●)。
实现功能描述:
1)点击“load”,加载需要处理的语音信号;
2)读取并对带噪信号进行自适应滤波;
3)绘制处理前后语音信号的时域波形图、时频能量图;
%==============加载文件指令=======================
[FileName,PathName] = uigetfile('*.wav'); %打开对话框
fle = [PathName FileName]; % 构成完整的路径和文件名
[s,fs,nbits] = wavread(fle); %新版本MATLAB为audioread
%==============绘图指令==========================
%需要在GUI界面插入axes框
axes(handles.axes3); %打开的文件显示在第一个图
plot(time,r1./max(abs(r1)),'k');
ylabel('幅度');xlabel('时间(s)');
title('带噪信号波形图');
对应效果图:

感兴趣的朋友可以留言交流:Q-441039377。
二、生成.exe可执行文件
GUI界面固然友好,但很多朋友甚至不会操作MATLAB界面,如何让他们进行一些操作呢?利用程序生成.exe是一个不错的办法。
如果计算机已经安装编译器,即可直接在Command Window输入:
mcc -m 文件名;%文件名为*.m的部分
此时,对应文件夹下会出现:文件名.exe 。双击运行即可进入GUI界面,无需通过MATLAB打开,对于更小白的人士,可以发送桌面快捷方式。
如果没有安装编译器,则需要如下操作:
- 安装编译器:
Command Window输入:mex -setup;
然后根据提示选择,直到安装完毕; - 设置编译器:
Command Window输入:mbuild -setup;
然后根据提示选择,直到操作结束; - 将脚本编译为exe可执行文件:
如文件夹下有:example.m example.fig;
则Command Window输入:mcc -m example;
- 安装编译器:
参考:
加法器设计:http://www.matlabsky.com/thread-5217-1-1.html
exe生成:http://blog.csdn.net/qq_20823641/article/details/51863737
MATLAB(3)——GUI界面设计入门的更多相关文章
- matlab gui界面设计记录
我们要进行的程序是彩色图像处理试验示例,用这个程序来练习我们的gui前台设计. 程序功能介绍:具有彩色图像处理及保存和音乐播放功能效果如下图 2 在MATLAB的命令窗口中输入guide命令,打开gu ...
- PyQt5多个GUI界面设计
版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/90454379 - 写在前面 本科毕业设计终于告一段落了.特 ...
- python3下GUI界面设计之控件精确定位
#codeing:utf-8import tkinterimport tkinter.messageboxfrom tkinter import filedialogfrom tkinter impo ...
- MATLAB GUI界面设计------“轴”组件配置
1> Fontsize 10 %字体大小 2> FontUnits normalized %采用相对度量单位,缩放时保持 ...
- 基于matlab的GUI界面开发软件
matlab工具deploytool编译M为可执行程序 http://blog.sina.com.cn/s/blog_60f8483a0100gnsm.html
- 基于MATLAB的GUI(Graphical User Interface)音频实时显示设计
摘要:本文章的设计主要讲基于matlab的gui音频实时显示设计,此次设计的gui相当于一个简洁的音乐播放器,界面只有”录音“和”播放“两个控件,哈哈,够简洁吧.通过”录音“按钮可以实现声音从电脑的声 ...
- GUI界面资源
30个真棒的(免费iPhone,iPad IOS)的GUI 界面设计元素模板 做iphone开发的福音 创造力是指任何一种演示设计i的能力.无论是一个标志,旗帜,广告或一个完整的设计,能够注入的创 ...
- 基于深度学习的车辆检测系统(MATLAB代码,含GUI界面)
摘要:当前深度学习在目标检测领域的影响日益显著,本文主要基于深度学习的目标检测算法实现车辆检测,为大家介绍如何利用\(\color{#4285f4}{M}\color{#ea4335}{A}\colo ...
- MATLAB图形界面设计(下)
文章参考Blue Mountain https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4307777.html 一.菜单设计 1.建立菜单项 (1)建 ...
随机推荐
- Ngxtop-Nginx日志实时分析利器
ngxtop实时解析nginx访问日志,并且将处理结果输出到终端,功能类似于系统命令top,所以这个软件起名ngxtop.有了ngxtop,你可以实时了解到当前nginx的访问状况,再也不需要tail ...
- MyEclipse中使用Junit插件进行单元测试
http://wenku.baidu.com/view/ec904a116bd97f192279e9a6.html
- 优秀web资源
http://www.filewatcher.com 一步一步asp.net_页面静态化管理 http://www.cnblogs.com/ylwn817/articles/2006923.html ...
- oracl 、mysql在线查看文档
Oracle .mysql在线开发文档: http://www.runoob.com/sql/sql-union.html
- Swift2.1keyword @noescape介绍
@noescape优化编译器编译,swift 2.1引入. 函数假设有一个一个參数是closure的话,能够在前面加一个关键字@noescape表示在函数return前closure生命周期结束,能够 ...
- Spark1.0.0 生态圈一览
Spark生态圈,也就是BDAS(伯克利数据分析栈),是伯克利APMLab实验室精心打造的,力图在算法(Algorithms).机器(Machines).人(People)之间通过大规模集 ...
- webservice系统学习笔记9-使用契约优先的方式的一个服务端demo(隐式传Header信息)
服务器端: 1.编写wsdl文件 <?xml version="1.0" encoding="UTF-8" standalone="no&quo ...
- 文本挖掘之文本聚类(MapReduce)
刘 勇 Email:lyssym@sina.com 简介 针对大数量的文本数据,采用单线程处理时,一方面消耗较长处理时间,另一方面对大量数据的I/O操作也会消耗较长处理时间,同时对内存空间的消耗也是 ...
- MassiGra045 简体中文化|打开图片很快
MassiGra045 简体中文化,是一款对图片的打开预览很高效的工具,据传是日本开发的. 本人之前一直使用,唯一有点缺点就是不能旋转图片. 图片预览 峰回路转: http://pan.baidu.c ...
- 如何在 Linux 下调试动态链接库
大家都知道在 Linux 可以用 gdb 来调试应用程序,当然前提是用 gcc 编译程序时要加上 -g 参数.我这篇文章里将讨论一下用 gdb 来调试动态链接库的问题. 首先,假设我们准备这样的一个动 ...