利用纯m文件生成ui界面(一)

写blog的背景

这学期课程设计学了关于ui的许多东西,正好在高铁上比较空就想马克一下。
从一开始的用guide再到纯m文件生成ui。是一种飞跃式的增长。技术这东西没有止境,只有一直研究一直做才可能做精,这中间需要无数的挫折和改正。

利用*.m生成ui界面的好处

  1. 让你对Matlab的数据存储以及各种参数更加的了解。
  2. 可以让你省去大量无用的注释,虽然利用设置里面的去除ui的注释,但是还是失去了灵魂。
  3. 最为重要的是,利用guide生成的ui其实本质上也是生成一种figure文件,而最为关键的是,其实guide自动生成了*.fig,如果打包不加入.fig文件的话就会运行不了。

利用*.m生成ui界面的坏处

  1. 由于不是傻瓜式的操作,所以每个控件的位置需要一定的尝试,即position矩阵的位置。
  2. 如果你对许多属性不了解的话,你会非常的痛苦,当然这可以利用guide里面的对象属性框来尝试学习。
  3. 由于缺失了guide里一些语句,你在书写时需要额外加入一些以保证参数的传递。

正文

Matlab图形对象的层次

在这里插入图片描述
这是从mathworks里截下来的图,可以看到0级对象(也有人说是1级对象)是root,1级对象是Figure后面(从右往左)分别是ui的对象、解释的对象、坐标轴 、注解的对象。它就好想一个家族系谱一样,事实上也是如此,其实0级即root对象是Figure的父对象,它又是2级对象的爷爷辈。你可以利用get(0)在command窗口里获取root对象的属性。
在这里插入图片描述
可以看到里面有许多的属性,其中比较重要的是callback,children,handlesvisibility,而屏幕尺寸则是因电脑而异,由于我的电脑是mac所以它就显示1440*900每台电脑都不一样。

生成一个窗口

其实guide就是帮忙生成了一个窗口,即.fig,而实际上你自己也可以生成一个figure,下面的带面便是:

 h = figure('menubar','none',...
   'NumberTitle','off',...    
   'Name','20177740--neverland的课程设计',...
   'Position',[300 120 1000 680],...
   'tag','figure1');

h即是figure对象,第一行是去除了工具栏,第二行便是使得标题上面的figure标号给删去(强迫症使然),第三行就是你的figure对象的名字,第四行是位置其实这个矩阵的四个参数分别为1,2是起始点的(x,y)坐标,后面2个参数是矩形的长和宽。另外控件的位置也是那么定下来的。
在这里插入图片描述
利用代码生成的figure窗口,这就是一级对象,同样你也可以利用get(对象名)来获得它的名称。
如果想在命令行窗口显示它,利用figure(序号)就行,这个序号常常是tag属性来存储的。

生成一个控件按钮

控件其实就是一个ui objects我们常用的主要有uicontrol、uimenu,当然还有uitab.第一个uicontrol有很多类型主要是通过’style’来实现的.
在这里插入图片描述
这里面的style比较常用的就是都比较常用,具体的可以自己尝试尝试。
下面利用代码生成一个edit可编辑文本框来并且来往里面添加‘’值‘’

a = uicontrol('Style','edit',...
              'Visible','on',...
              'FontSize',20,...
              'Units','pixels',...
              'Position',[100 100 200 200],...
              'Parent',h)

在这里插入图片描述
于是生成了如下的控制按钮,这是个文本编辑的按钮
plus:如果对对象属性不太熟悉的话也可以按Tab键来自动填充,当然你需要大概知道这些是做什么的。
好了接下来就可以填入数值了。
填入数值有两种方法,我比较常用的是set

a.String = 20  
set(a,'String',20)

两种方法都可以往里面填入数值,文本框里面的string可以填入数值型也可以填入文本型的,当时不能填入字符变量sym型,之前帮同学debug的时候利用vpa为了显示结果把原来的double变成了sym填入不了文本框。
在这里插入图片描述
这里解释一下为什么两种方法,其实Matlab存储的时候把变量定义成了一种结构体,结构体里面可以存储很多东西,如果愿意,你给变量存储为阿猫阿狗都行,结构里面的字段取什么都行。而控件其实就是个结构体变量,里面有许多比较常用的属性罢了。(下篇文章也将创造axes坐标轴来显示图像)
稍微基础性的写完了,下一篇写一个利用调用库函数显示图像边缘的ui。。

发布了14 篇原创文章 · 获赞 2 · 访问量 845

猜你喜欢

转载自blog.csdn.net/weixin_43342986/article/details/103962913