MATLAB实用操作----GUI简单模板

MATLAB实用操作----GUI简单模板

为了更好的呈现程序并提供一个更美观的人机交互界面,中途学习了GUI,当然,GUI不是什么高难度的东西,其实GUI仅仅是一个壳,用来承载我们的核心算法或者核心思想,但是,一个好看而实用的GUI确实看上去让人赏心悦目。因此,在这里分享一下我在GUI设计中,其中包含了一些你肯定想要实现的效果,当然这些效果的实现你在网上也能找到,不过零零散散,良莠不齐,我在这里直接提供经过检验的一些可行的方案。当然,本人学识浅薄,如有错误,敬请批评指正。完整工程下载【我认为一个完整的工程会大幅提高GUI学习的效率】
先看一下最终效果:
在这里插入图片描述

GUI实质

首先在介绍GUI为小白普及一下GUI的实质,大神勿喷,GUI实质是一个figure,与在workspace(就是MATLAB的主界面)中使用plot绘图呈现的东西是一个性质的。当然,你可能会问GUI里不是可以绘图吗,你说的没错,但实质上GUI绘图使用的是axes(这个就是坐标轴),而在workspace里在绘图前,使用figure指令就可以调出一个figure,所以不要把GUI中的操作和workspace的操作混淆了。一定要加以区别。
下面介绍GUI使用中的实用代码:

1、GUI 背景 & 左上角图标 切换

GUI默认的背景是纯色的,想要弄一个自己喜欢的背景图可以参考下面的代码:
记住一定是在GUI的OpeningFcn中添加,因为这个函数是GUI启动第一次执行的程序,这样就可以在程序一执行就改变背景图:

function CUMCM_2019_CODE_OpeningFcn(hObject, ~, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
%下面是改变背景图和左上角图标的代码
warning off all;%去除警告
javaFrame=get(hObject,'JavaFrame');
javaFrame.setFigureIcon(javax.swing.ImageIcon('Supporter\LogoPic.jpg'));%更改左上角图标logo
ha=axes('units','normalized','pos',[0.8 0 0.2 1]);%在左下角为[0.8,0]右上角为[0.8+0.2,0+1]的矩形放置背景图
uistack(ha,'bottom');%将背景图设置在GUI显示图层的最低层
ii=imread('Supporter\BackGroundPic.jpg');%读取一个即将被作为背景的图片文件
image(ii);
colormap gray
set(ha,'handlevisibility','off','visible','off');%由于图片是绘制在一个坐标轴的,需去除掉图片的坐标轴

实现效果:在这里插入图片描述

2、GUI 可切换菜单

GUI的多菜单切换的实现需要在一开始就将所有菜单设置好,其实现的主要思想是隐藏不需要的菜单面板,显示需要的菜单面板。并将显示的位置固定,只能在一个相同的区域显示菜单,这样看上去就是实现了菜单的可切换。以一个例子介绍实现的方法:
先在Guide面板中画3个菜单:
在这里插入图片描述
这时候看上去虽然不是在一个位置,但是加上下面几句话你就明白了,设置一个固定显示的位置,当然你一看我下面这个位置还有小数点是怎么试出来的,当然这不是试出来的,先在Guide里调好位置,然后运行一下,把这个位置显示出来下一次设置就好了,那么怎么获取这个位置呢,这就是我下面要说的东西了:

set(handles.TuoPan1,'visible','on','position',[130.1429    2.5000   26.8571   30.0500]);
set(handles.TuoPan2,'visible','off');
set(handles.TuoPan3,'visible','off');

运行这几句后,自然就会看到最上面的那张图了。

3、GUI获取对象参数

我认为GUI学习中最重要的莫过于看文档,看参数,一看你就明白了,因此,这里介绍一下怎么查询GUI里某个对象的参数,方法很简单,一句话搞定:
例如:获取下拉菜单的值

WenTi = get(handles.XiaLa,'value');%获取下拉菜单的值,这里的返回值为1 2 3 4 .....(从1开始的,和C语言的枚举不一样,这可能是M语言的特色吧)

可以看到,get 函数在查询对象参数中的作用不言而喻。如果你想知道某一个对象所有参数,这样就可以了,当你知道有什么参数后就可以为你的GUI设计减轻很多工作量了:

WenTi = get(handles.XiaLa);
disp(WenTi);%将参数显示出来

4、GUI指定位置绘图

GUI固定位置绘图,或者指定某一个axes绘图是十分有意义的,比如要绘制两个比较的图,就一定不能画错位置。而GUI的绘图实质是在axes里绘图,因此需要先获得axes的句柄,通过简单的一句话就可以:

axes(handles.Show_Window);%得到画图坐标轴的句柄,我给axes取得别名是Show_Window所以是handles.Show_Window

同时,由于绘图可能在不同的函数里进行,那么用一个更好的方法可以吗?当然可以。那么这就需要在OpeningFcn启动时候就定义一个全局变量用来存贮这个句柄(句柄可以理解为就是一个程序入口或者一个地址)。

global Show_Window;
Show_Window = handles.Show_Window;%下一次就可以直接使用axes(Show_Window);获取句柄了

5、GUI与Workspace的数据交互

MATLAB的Workspace和GUI是两个独立的运行空间,数据不能直接交互,因此,如果想在GUI中使用或者修改Workspace中的变量,就需要使用全局变量了,这样就可以让变量在Workspace和GUI之间畅通无阻。这和Simulink与Workspace的方法类似的。但是一定要注意的是,在Workspace中的.m脚本使用global声明了变量后,如果要在GUI中使用也一定要再声明一次,并且这个变量一定要再所有使用到的函数里声明。如果在GUI的函数1和函数2都需要使用这个全局变量,那么在GUI的函数1和函数2都需要声明这个全局变量一次。
声明全局变量的方式:

global time;%global就是用来声明全局变量的
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值