关于MATLAB入门的简单记录13 图形对象接口(GUI)

关于matlab的图形系统:

Matlab 图形系统以图形对象为基本单元,图形对象也称图形句柄,句柄可以通过底层函数来精细的进行控制,图形对象系统按树形结构管理。
用GUIDE进行建立自己的界面,这点有点类似于VC++的操作,可以自行拖出控件实现对话框的建立

关于matlab图形系统的结构:


根对象下可以有一个或者多个图框窗口对象,图框窗口对象就是figure,figure除了包含图片中列举的菜单对象,按钮对象,坐标系对象之外还有uicontext对象,该对象定义右键菜单

注意父子关系存在着继承性,如果要更改属性,可以像VC++中一样,覆盖掉即可,这点个人感觉类似C++中的虚函数

句柄:每个图形对象都有一个独一无二的名字,称为句柄,在matlab中句柄是唯一的整数或实数,用于标识对象,任何创建图形对象的命令均可返回句柄,这点就像前面提到I/O一样,也是一个唯一的数,不过不再有正整数的要求,这点和windows句柄做区别。一般习惯上把句柄的变量命名为H


有三个命令,gcf gca gco(get current figure/access/object)获取当前图像对象句柄,获取当前坐标轴句柄,获取当前对象的句柄。这三个函数的存在意义就是当没有专门的变量用于接收句柄的时候也可以想办法获取到对应的句柄值,用法就是直接使用命令即可。

注意当前对象句柄指的是当前图像中的图行的句柄,或者是鼠标最后点击过的图像的句柄,不过不能是菜单

gcf使用的时候如果在工作空间里没有任何图形窗口打开,直接使用会自动创建一个图形窗口。同样的如果gca在使用时候没有任何坐标轴的话,会在对应的figure中创建对应的坐标轴,gco没点击任何object的话,返回空

一个图形对象被创建时候如果没有手动指定对象属性,系统就会指定默认属性。比如说画一条直线,调用后默认黑色实线

属性名:大小写混排,每个单词的首字母一般大写。

创建时改变属性:(属性名,属性值)

比如说可以这样:用于指定线宽,区别于默认的细线


也可以在创建后改变属性:get(handle),get(handle,propertyname)
setget会返回一个结构数组,域名和域值代表属性名和属性值。

这里列举出好多属性,如果需要指定对应的属性,直接用set函数进行指定即可:

get函数可以指定相应的属性而不直接列举出全部内容


对应的set函数如果进行了相同的指定,返回所有可设置项目的可选范围


前面的线宽因为没有固定的取值范围,所以返回对应的这句话

当然如果直接set参数里只有句柄而没有其他的参数,那么结果会返回所有的可能取值,用单元数组的方式进行返回,如果进行查看就应该用单元数组方式进行查看


有一点需要注意的是get和set函数在使用时候图形对象的窗口必须是打开状态,如果已经关闭,再使用get和set函数时候就会出错

前面提到过gco,有时候如果不确定点击的是什么对象,使用get函数就可以做到

get(gco,'Type')%用于查询对象的具体属性

还可以用propedit进行图像属性的设置,不加参数的话默认是对当前打开的图像进行操作,后面接受句柄参数,进行对对应的句柄进行操作。操作会显示一个图形的设置框,在里面用鼠标操作对应的设置即可。

实例操作:



x=-3*pi:0.01:3*pi;
y=sin(x)./x;
Hnd1=plot(x,y);
set(Hnd1,'LineWidth',3,'Color',[0.905882352941176,0.701960784313725,0.145098039215686]);%注意平时表示颜色一般都是R G B 0-255 在matlab中color的设置是0-1的闭区间,所以进行对应转化的时候应该取1/255
Hnd2=gcf;%获取当前窗口句柄
set(Hnd2,'Color',[0.996078431372549,0.807843137254902,0.705882352941177]);
Hnd3=gca;%获取当前坐标轴句柄
set(Hnd3,'YGrid','on');

也可以进行自定义属性,属性名和属性类型均可以由用户自己指定,使用到的相关函数

setappdata,getappdata,isappdata

关于setappdata,参数是对应的句柄,设置的属性名,设置的属性值  应该注意的是setappdata设置的自定义属性进行查看时候只能用getappdata函数进行查看而不能使用get函数进行查看,因为get函数只能用来查看标准的属性,直接使用get函数进行查看无法找到对应的属性

删除自定义属性时候使用rmappdata函数,参数是属性名,属性值

查看自定义属性是否存在:isappdata(句柄,属性名)如果存在会返回数值1,不存在返回数值0

findobj函数返回所有的根对象以及其继承者(根对象就是屏幕),这里0表示屏幕,1表示图形窗口,第三个数字是对应的坐标轴


findobj带参数属性名,属性值 后,会查找符合条件的对象,并将句柄返回

中间可以加入逻辑关系:与或非,用于连接多个属性,缩小查找范围



函数waitingforbuttonpress可以在程序执行到这个语句时候挂起,等待用户进行下一步操作,如果点击的是鼠标,其返回值是0,如果是键盘,其返回值是1


例子,关于显示属性的系列操作

% details,H1,H2,Handle,k,type,y1,y2,yn
x=-3*pi:pi/10:3*pi;
y1=sin(x);
y2=cos(x);
H1=plot(x,y1);
set(H1,'LineWidth',2);
hold on;
H2=plot(x,y2);
set(H2,'LineWidth',2,'LineStyle',':','Color','r');
title('\bfPlot of sin\itx\rm\bf and cos\itx');%在这里需要注意的是\b粗体设置好之后会一直作用,所以后面的x是斜体的同时(由于\it)也是粗体为了让f不是斜体,所以中间用\rm取消设置
xlabel('\bf\itx');
ylabel('\bfsin\itx\rm\bf and cos\itx');
legend('sine','cosine');
hold off;
k=waitforbuttonpress;
while k==0%这个循环按任意键盘退出
    Handle=gco;
    type=get(Handle,'Type');
    disp(['Object type=' type '.']);
    yn=input('Do you want to display details?(y/n)','s');
    if yn=='y'
        details=get(Handle);
        disp(details);
    end
    k=waitforbuttonpress;
end


点击之后


图形窗口有一个位置属性

前两个值代表窗口左下角相对于屏幕左下角的像素(默认)位置,后两个值代表长和宽

具体计量单位可以不同,默认是像素


设置计量单位时候,normalized指的是归一化,屏幕上下,左右计量为0-1 如果图形窗口左下位于屏幕中心位置,那么就是0.5 0.5

这种用法的好处是可移植,因为这是相对值,适应不同屏幕

前面提到的gco在点击时候如果两个对象离得很近,选择的就是以“上面的”为主,这点类比于Photoshop中的图层概念即可

子对象也可以指定其位置,指定的位置一般是相对于父对象的。比如说axes是figure的子对象,又是text,uicontrol的父对象

axes位置属性含有参数四个,前两指定相对figure左下角位置,后两个指定占用figure大小



axes参数也可是一个句柄用于指定对应的为当前值


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值