matlab guide的简介和简单使用

简介

在这里插入图片描述

guIde有四种设计模板
在这里插入图片描述
这四种模板的具体描述为:
在这里插入图片描述

选择模板创建gui后,会产生.fig文件以及一个同名字的M文件【注:不可更改为不一致的文件名,否则运行要出错】
在这里插入图片描述
在窗口的左边的小图标,称为控件面板,各个小图标即控件;上方的菜单啥的就是一些快捷按钮了,把鼠标放到上方就会出现对应的功能描述,下面将一一介绍

快捷键

1.对其对象键

利用该键可以将多个对象进行位置调整,可以使gui设计界面简洁美观

在这里插入图片描述

在这里插入图片描述

2.菜单编辑器

创建,设计,修改下拉式菜单和快捷菜单
在这里插入图片描述
菜单编辑器中有:新建菜单、新建菜单项、新建上下文菜单,然后四个移动选定项的箭头以及删除选定项的按钮。
注:标记就是tag值,所以就可以用handles结构体进行一系列操作
在这里插入图片描述

在这里插入图片描述

两种菜单的设计方法

(1)菜单栏设计
①基本使用
选中Untitled 1然后点击新建菜单项,就会在此菜单下新建子菜单,那四个箭头可以改变菜
然后点确定,也可以加上快捷键如图可以看到,回到GUI窗口,运行保存
在这里插入图片描述
在这里插入图片描述
②如何在子菜单中加入回调函数
界面上方(子菜单1)用按钮绘制sin图像和清空图像,界面下方(子菜单2)用按钮控制显示图片
guide界面如下设置
在这里插入图片描述
为了不在主菜单显示有关控件,将所有控件visible设置off
在这里插入图片描述
然后就可以在子菜单中加入回调函数,代码如下

%子菜单1显示控件代码
h1=[handles.axes1 handles.sin handles,clear];
set(h1,'visible','on');
h2=[handles.axes2 handles.picture];
set(h2,'visible','off');

在这里插入图片描述
这样就可以在子菜单1中显示,子菜单2类似代码。之后就可以在相关按钮上加入回调函数实现功能,这里着重展示显示图片的代码

%在显示图像按钮的回调中写
[filename,filepath]=uigetfile({'*.bmp;*.png;*.jpg;'},'选择图像');%将可导入的文件类型写下来
if(isequal(filename,0)||isequal(filepath,0)) %如果按了取消,则return
    return;
end
image = [filepath,filename]; %将文件名保存下来,并作为全局变量,方便后面程序调用
im=imread(image);%读图
axes(handles.axes2);%axes载入图片,所以这句代码意思是在坐标轴2下画图
imshow(im);

注意filename中保存的是文件名,filepath中保存的是路径,注意第二句代码中一定是filepath在前,以便后面可以读取到文件。
在这里插入图片描述

(2)上下文菜单,这个是相当于给组件添加右键菜单的
先创建好菜单
在这里插入图片描述
然后回到GUI窗口,进行操作

在这里插入图片描述
这时候按钮还未赋予右键菜单的能力,先右键找到属性检查器并打开,将UIContextMenu的选项None改为刚刚创建的菜单”Untitled 4“,即赋予了该按钮右键菜单是Untitled 4

在这里插入图片描述
这时候回到GUI窗口,运行图形,在出现的界面,在按钮上右键,弹出Untitled 4下5和6的菜单选项
在这里插入图片描述
右键菜单也可以调用回调函数,类似上面

3.Tab键顺序编辑器

通过该工具可以设置,当用户按下Tab键时对象被选中的先后顺序
在这里插入图片描述

4.属性检查器

可以查看对象的属性并修改
在这里插入图片描述
在这里插入图片描述

gui数据管理机制

①gui数据可以看成handles结构体,handles结构体包括gui界面设计对象的句柄值,这些句柄值由该对象的Tag值所呈现。所以,句柄值=handles.Tag值
实例,我们若想按下一个按钮,其一个静态文本将显示按钮的名字。我们将按钮的Tag改成a,静态文本Tag改成s,实现代码如下

set(handles.s,'String',get(handles.a,'String'));

②我们可以自己定义一个handes结构体,但定义之后,其后面必须用guidata(hobject,handles)更新数据
③什么是对象或者数据的一致访问?
先创建一个按钮,那我们是否可以handles.push访问这个对象呢?运行报错,why?因为这个push从未被定义,是个非法字段。那该如何才能跟guide界面上的对象一样能访问呢

uicontrol('style','pushbutton','tag','push');
首先将用户创建的对象用句柄值记录 h=uicontrol('style','pushbutton','tag','push');
其次将句柄值赋给handles的某一字段中,为了保持访问一致性,将其tag值做为字段名 handles.push=h;
最后再用guidata更新数据
                              

④如何给用户创建的对象加回调函数
先在opening函数中加入

h=uicontrol('style','pushbutton','tag','push','Callback',{@push_Callback,handles});
handles.push=h;

最后就可以写入回调函数,这里使用一般按钮加入回调,按钮回调一般模式
tag值_Callback,这里写什么都行,只要上下保持一致就行

function push_Callback(hObject, eventdata, handles)
具体调用的函数 如:set(handles.s,'String',get(handles.a,'String'));

guide实例

实例一画图

按下三个按钮绘制sin cos tan 还有清除键clear
主要代码如下

在opening函数中定义一个自变量,方便使用
function untitled2_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.x=-pi:0.01:pi; %定义一个自变量,这样定义就可以在别的handles中相互调用
% Update handles structure
guidata(hObject, handles);
sin,cos,tan函数底层
function sin_Callback(hObject, eventdata, handles)
x=handles.x;
y=sin(x);
plot(handles.zuo,x,y,'--r');
function cos_Callback(hObject, eventdata, handles)
x=handles.x;
y=cos(x);
plot(handles.zuo,x,y,':b');
function tan_Callback(hObject, eventdata, handles)
x=handles.x;
y=tan(x);
plot(handles.zuo,x,y,'k');
function clear_Callback(hObject, eventdata, handles)
try
    delete(allchild(handles.zuo)); %allchild函数:找到某一句柄的所有子对象
end

结果
在这里插入图片描述

实例二显示时间

用matlab的timer函数,timer对象常用的属性如下(详细参考官方文档):
TimerFcn: 定时到达之后所执行的回调函数
ExecutionMode: 执行模式,下面四种:
sigleShot;只执行一次,故Period属性不起作用,其他模式都可以执行多次
fixedDelay;上一次开始执行到下一次被加入执行队列时刻之间的间隔
fixedRate;前后两次加入执行队列的间隔时间
fixedSpacing: 第一次执行完毕到下一次加入执行队列的时间
注:执行队列是指过一会才开始执行

在这里插入图片描述
代码如下:

%在opening函数加入
handles.ht = timer(...,
    'ExecutionMode', 'FixedRate', ...
    'Period', 1, ...
    'TimerFcn', {@ShowTime, handles}); %生成一个定时器

start(handles.ht);%启动定时器
%自己写的回调函数
function ShowTime(hObject, eventdata, handles)
set(handles.showtime, 'String', datestr(now));%datestr函数获取当前时间

在这里插入图片描述

实例三鼠标响应

跟鼠标有关的回调函数
(1)函数WindowButtonMotionFcn,当鼠标在窗口上运动的时候就会相应此函数,于是在此函数中可以设置运动时想要的代码
(2)函数WindowButtonDownFcn,当鼠标按下去的时候就会响应的函数,但是鼠标按下分为左键和右键,如下区分:

if strcmp(get(gcf,'SelectionType'),'alt')
 % 此时即为右键
else if strcmp(get(gcf,'SelectionType'),'normal')
 % 此时即为左键
 end

用属性SelectionType用来判断鼠标按键的类型
normal:代表单击鼠标左键;
extend:代表Shift+左键,或者同时按左右键;
alt:代表Ctrl+左键,或者单击右键;
open:代表双击鼠标任意键。
(3)函数WindowButtonUpFcn,当鼠标被按下后起来的时候的响应函数,同理,可以在里面设置自己想要的代码。

现在开始编写代码,由于我们要按下鼠标,松开鼠标,鼠标移动,但是这三者是不同的回调函数,为了传递数据,先在openging函数中定义两个全局变量

global buttondown pos1
buttondown=[]; %鼠标是否按下
pos1=[];       %鼠标位置

首先确定鼠标是否右键按下

%在WindowButtonDownFcn函数中
global buttondown pos1
if strcmp(get(gcf, 'SelectionType'), 'alt')	
    buttondown = 1;
    pos1 = get(handles.axes1, 'CurrentPoint');
end

鼠标松开

%在windowbuttonupfcn函数中写
global buttondown
buttondown=0

鼠标移动

%在WindowButtonMotionFcn函数中写
global buttondown pos1
if buttonDown == 1
    pos = get(handles.axes1, 'CurrentPoint');
    line([pos1(1, 1) pos(1, 1)], [pos1(1, 2) pos(1, 2)], 'LineWidth', 4);
    pos1 = pos;
end

在这里插入图片描述

实例四键盘响应

主要是在KeyPressFcn回调函数中编写代码,通过figure属性的CurrentCharacter判断按下的acsall值
按下回车登录界面
在这里插入图片描述
主要代码

%在登录按钮的回调函数
name=get(handles.name,'string');
code=get(handles.code,'string');
if strcmp(name,'king')&&strcmp(code,'1111')
    delete(gcf);%关闭当前界面
    untitled_time;
end
%通过键盘按键登录,此例是按下回车
if get(gcf,'CurrentCharacter')==13 %判断按下的是否是回车键
   name=get(handles.name,'String');
   code=get(handles.code,'String');
    if strcmp(name,'king') && strcmp(code,'1111')%字符串比较
       delete(gcf);%关闭当前的窗口
         untitled_time;%打开新的GUIDE
    end
 end
  • 9
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值