MATLAB GUI编程总结:

  • 创建Matlab GUI界面通常有两种方式:

1 使用 .m 文件直接动态添加控件

2 使用 GUIDE 快速的生成GUI界面

一、创建GUI

  • 方法一.:在 .m文件中动态添加

    h_main=figure(‘name’,‘a demo of gui design’,‘menubar’,‘none’,…'numbertitle','off','position',[100 100 300 100]);h_edit=uicontrol('style','edit','backgroundcolor',[1 1 1],'position',[20 20 50 20],...'tag','myedit','string','1','horizontalalignment','left');h_but1=uicontrol('style','pushbutton','position',[20 50 50 20],'string','INC',...'callback',['v=eval(get(h_edit,''string''));',...'set(h_edit,''string'',int2str(v+1));']);h_but2=uicontrol('style','pushbutton','position',[80 50 50 20],'string','DEC',...'callback',['v=eval(get(h_edit,''string''));','set(h_edit,''string'',int2str(v-1));']);
    
  • 方法二
    在Command 里面输入 GUIDE 或者从菜单里面,或者从快捷按钮均可 进入 GUIDE
    新建并且保存后,会生成相应的fig文件和m文件,在Layout编辑视图,可以使用如下工具:

      Layout Editor:布局编辑器;Alignment Tool:对齐工具;Property Inspector:对象属性观察器;Object Browser:对象浏览器;Menu Editor:菜单编辑器。
    

二、控件的使用

新建一个布局(窗口),可以在新窗口中添加如下控件

1.静态文本(Static Text)                                 2.编辑框(Edit Text)控件
3.列表框(Listbox)控件                                   4.滚动条(Slider)控件
5.按钮(Push Button)控件                                 6.开关按钮(Toggle Button)控件
7.单选按钮(Radio Button)控件                             8.按钮组(Button Group)控件
9.检查框(Check Box)控件                                 10.列表框(Listbox)控件
11.弹出式菜单(Popup Menu)控件                            12.坐标轴(Axes)控件
13.面板(Panel)控件

每一个控件都有自己的属性常规属性有:

一、控件风格和外观
(1)BackgroundColor:设置控件背景颜色,使用[R G B]或颜色定义。
(2)CData:在控件上显示的真彩色图像,使用矩阵表示。
(3)ForegroundColor:文本颜色。
(4)String属性:控件上的文本,以及列表框和弹出菜单的选项。
(5)Visible:控件是否可见。

二、对象的常规信息
(1)Enable属性: 表示此控件的使能状态,设置为on”,表示可选,为“off”时则表示不可选。
(2)Style:控件对象类型。
(3)Tag:控件表示(用户定义)。
(4)TooltipString属性:提示信息显示。当鼠标指针位于此控件上时,显示提示信息。
(5)UserData:用户指定数据。
(6)Position:控件对象的尺寸和位置。
(7)Units:设置控件的位置及大小的单位
(8)有关字体的属性,如 FontAngle, FontName等。

三、控件回调函数的执行
(1)BusyAction:处理回调函数的中断。有两种选项:即Cancel:取消中断事件,queue:排队(默认设置)。
(2)ButtonDownFcn属性:按钮按下时的处理函数。
(3)CallBack属性:是连接程序界面整个程序系统的实质性功能的纽带。该属性值应该为一个可以直接求值的字符串,在该对象被选中和改变时,系统将自动地对字符串进行求值。
(4)CreateFcn:在对象产生过程中执行的回调函数。
(5)DeleteFcn:删除对象过程中执行的回调函数。
(6)Interruptible属性:指定当前的回调函数在执行时是否允许中断,去执行其他的函数。

四、控件当前状态信息
(1)ListboxTop:在列表框中显示的最顶层的字符串的索引。
(2)Max:最大值。
(3)Min:最小值。
(4)Value:控件的当前值。

三:写回调函数 CallBack

每个控件都有几种回调函数,右键选中的控件一般会有如下菜单:
然后就可以跳转到相应的 Editor中编辑代码,GUIDE会自动生成 相应的函数体,函数名,名称一般是 控件 Tag+ Call类型名 参数有三个 ( hObject, eventdata, handles)

其中 hObject 为发生事件的源控件,eventdata为事件数据结构,handles为传入的对象句柄
CreateFcn 是在控件对象创建的时候发生(一般为初始化样式,颜色,初始值等)
DeleteFcn 实在空间对象被清除的时候发生
ButtonDownFcn和KeyPressFcn分别为鼠标点击和按键事件Callback
CallBack为一般回调函数,因不同的控件而已异。例如按钮被按下时发生,下拉框改变值时发生,sliderbar 拖动时发生等等。

四:句柄图形之间的层次关系

可以创建 图形句柄的常见函数
1.figure函数:创建一个新的图形对象。
2.newplot函数:做好开始画新图形对象的准备。
3.axes函数:创建坐标轴图形对象。
4.line函数:画线。
5.patch函数:填充多边形。
6.surface函数:绘制三维曲面。
7.image函数:显示图片对象。
8.uicontrol函数:生成用户控制图形对象。
9.uimenu函数:生成图形窗口的菜单中层次菜单与下一级子菜单。
几个实用的小函数:
uigetfile 选择文件对话框
uiputfile 保存文件对话框
uisetcolor 设置颜色对话框
fontsetcolor 设置字体对话框
msgbox 消息框
warndlg 警告框
helpdlg 消息框
不过如果要让父窗口不可用,你需要使用uiwait来定焦于用户对话框。
例如:
h=helpdlg(‘Please press me!’,‘Attention’);
uiwait(h);

四:获取与设置对象属性

常用函数:
gcf函数:获得当前图形窗口的句柄
gca函数:获得当前坐标轴的句柄
gco函数:获得当前对象的句柄
gcbo函数:获得当前正在执行调用的对象的句柄
gcbf函数:获取包括正在执行调用的对象的图形句柄
delete函数:删除句柄所对应的图形对象
findobj函数:查找具有某种属性的图形对象
设置方法:

(1)get函数返回某些对象属性的当前值。例如:
p=get(obj,‘Position’);
(2)函数set改变句柄图形对象属性,例如:
set(obj,‘Position’,vect);

五:函数调用

在一个m文件中,可以定义多个函数,但是文件名一定要与第一个函数(主函数)一致,
该文件中其他函数则为本文件的私有函数,外部不可访问(可以通过参数调用的方法访问,下面会描述)。

例如在一个程序中,创建一个fig后,会生成这样一个m文件:

function varargout =febirdfun(varargin)
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @febirdfun_OpeningFcn, …
‘gui_OutputFcn’, @febirdfun_OutputFcn, …
‘gui_LayoutFcn’, [], …
‘gui_Callback’, []);

if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
解析 一下这个主函数:首先 gui_State是一个结构,指定了figure打开和输出函数,
开始 gui_CallBack为空,如果输入参数个数不为0,接下来将输入第一个参数传递给gui_State.callback。
接下来用交给 gui_mainfcn函数处理,gui_mainfcn 根据gui_State和传入参数
来确定是执子函数,还是打开 fig 文件和运行 OpeningFcn和OutputFcn。
如过 gui_Callback为空,那么就运行打开主窗口fig文件,否则,调用子函数
这个函数的作用有:
1.当输入不带参数的时候,能够打开fig文件,并且初始化控件
2.当指定需要调用的函数名时,可以作为其他控件callback使用 (实则调用同文件中的子函数)
例如,在某一个控件的 callback 里面这样写:(febrdfun为主函数)
febirdfun("@push_button_Callback",gcbf,[])
这样的调用就可以调用文件里面的子函数。
当然也可以使用其他文件里面的函数作为callback,不过那样的话,数据传递会麻烦一些。
下面看figure Openning Function
%================================
function Main_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
% 通常在这里面定义自己的数据结构例如
s=struct(“P1”,v1…
“P2”,v2);
handles.MyStruct=s;
% 更新handles数据结构 非常重要!!
guidata(hObject, handles);
%================================
function varargout = Main_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
这个函数是输出返回值的定义
注意: matlab 中,function 对应的 end 可以没有,但是随着版本的更新,end将会被要求。

六、matlab中的数据

在MATLAB GUI中,数据分两种:GUI data和application data。 两种数据的存取机制是相同的,但是GUI data使用起来比较方便。
每一个GUI 图形界面都维持一个和自己的界面的图形(figure)相联系的一个handles数据结构,这个数据结构中容纳图形界面内所有控件(按钮、列表框、编辑框等)的句柄,相当于一个大的“容器”,里面存放了figure内所有控件的句柄。
同时,handles结构也可以被figure内所有控件的回调函数访问,因为回调函数的输入参数中都有handles结构。此外,在控件的回调函数内可以把数据存储到handles结构中。
guidata函数:取得和存储handles结构数据
例如:在编辑框edit的回调函数内想获得t编辑框的句柄,hObject可以,也可用handles.edit,这两个值是一样的,没有区别,只不过获得控件句柄的方式不同而已

hObject是调用回调函数时直接传过来的
handles.edit是从handles结构中取得的。
但是,在控件的CreateFcn函数中如果想访问控件,必须用hObject,而不能用handles.edit,因为这时控件还没被创建,其句柄还没有加入到handles结构中。
各控件的回调函数中,hObject的值是不一样的,分别代表调用回调函数的控件的句柄,而handles结构却是一样的。这种机制便于figure内的不同控件的回调函数内传递数据。

把进度条嵌入到matlab GUIDE界面中

function mywaitbar(x,varargin)
if nargin < 1error('Input arguments not valid');
end
fh = varargin{end};
set(0,'CurrentFigure',fh);
%fAxes = findobj(fh,'type','axes');
fAxes =varargin{2};
set(fh,'CurrentAxes',fAxes);
if nargin > 1hTitle = get(fAxes,'title');set(hTitle,'String',varargin{1});
end
fractioninput = x;
x = max(0,min(100*x,100));
if fractioninput == 0    claxpatch = [0 x x 0];ypatch = [0 0 1 1];xline = [100 0 0 100 100];yline = [0 0 1 1 0];patch(xpatch,ypatch,'r','EdgeColor','r','EraseMode','none');set(fh,'UserData',fractioninput);l = line(xline,yline,'EraseMode','none');set(l,'Color',get(gca,'XColor'));
elsep = findobj(fh,'Type','patch');l = findobj(fh,'Type','line');if (get(fh,'UserData') > fractioninput)set(p,'EraseMode','normal');endxpatch = [0 x x 0];set(p,'XData',xpatch);xline = get(l,'XData');set(l,'XData',xline);
end
drawnow;%主程序调用:修改句柄函数值就可以指定axes1作为条形框了
h1=findobj(handles.axes1,'visible','off');%获取按键1的可视化句柄
set(h1,'visible','on');%设置句柄为可见
mywaitbar(0,'Please Wait...',handles.axes1,handles.figure1);
TheEndTime = 600;
for t = 1:TheEndTimemywaitbar(t/TheEndTime,[num2str(floor(t*100/TheEndTime)),'%'],handles.axes1,handles.figure1);
end

matlab中delete、close、cla、cla含义

matlab中删除对象
删除对象
(1)delete:删除文件或对象图形
删除文件对象h的格式为:delete(‘filename’)或delete filename
删除图形对象h的格式为:delete(h);
若要无条件删除所有的图形对象,则:set(0,‘showhiddenhandles’,‘on’);delete(get(0,’'children));

(2) clf:清空当前figure窗口。
格式如下:
clf:删除当前窗口中所有对象(handlevisibility的值为on)
clf(‘rest’):删除当前窗口所有对象(不论句柄是否隐藏);并重设fig属性为系统默认值,但以下4个属性保留原值:position,units,paperposition,paperunits。当人若integerhandle属性值为off,重设后,integerhandle属性值为on原浮点形式的句柄无效,此时Matlab会自动为其分配一个整形句柄,原句柄失效。若要返回新创建的整形句柄,使用下面的格式:
figure handles=clf(fig.‘reset’);
若在使用过程中(handlevisibility的值为off)照样删除窗口中所有对象,并重设窗口属性。

(3)cla:清除当前坐标系。
格式如下
cla:删除当前坐标轴中句柄不隐藏的对象(handlevisibility的值为on)
cla rest:删除当前坐标系中所有的对象(不论句柄是否隐藏),并重设axes属性为默认值,但以下2个属性保留原值:position和units

(4)close:关闭当前窗口。
其调用格式列举如下:
close:关闭当前窗口,等价于close(gcf)
close(h):关闭对象h的窗口
close name:关闭名为h的窗口
close all:关闭所有句柄可见的窗口
close all hidden:关闭所有的窗口
close all force:关闭所有的gui窗口,即使该窗口的closerequestfcn设置该窗口不关闭。
status=close(……):关闭指定窗口,成功返回1,否则,返回0。
close函数调用时,会执行指定的figure对象的closerequestfcn函数。该函数默认执行closereq,该函数相当于delete(get(0,‘currentfigure’)).而delete函数不执行closerequestfcn函数,它仅仅删除指定的figure。

(5)closereq:默认的窗口请求关闭函数,无输入和输出参数,相当于delete(gcf).

MATLAB 中GUI edit的多行设置

Edit多行设置,要把Edit的Max和Min属性修改,令Max-Min>2(其实Max表示最多多少行,Min表示最少多少行)。

然后set字符串的时候,用数字"10"作换行符(因为换行符的ASCII码是10)。

代码如下:
str1 = [‘第一行’, 10];
str2 = [‘第二行’, 10];
str3 = [‘第三行’, 10];
str4 = ‘没有了’;
str = [str1, str2, str3, str4];
set(handles.editResult, ‘string’, str);

MATLAB GUI编程总结相关推荐

  1. Matlab GUI编程

    Matlab GUI编程 1.在命令行窗口输入guide >>guide 2.出现下图窗口,点击确定. 3.出现ui的编辑窗口 4.和大多数UI编程软件一样,直接拉控件就行了.双击控件可出 ...

  2. Matlab GUI编程技巧(三):把figure文件显示到GUI的axe上

    在matlab的GUI编程中,把figure的图像显示到GUI的axe上是非常重要的的,GUI编程下的图像显示非常常见.matlab GUI默认菜单的保存图像默认为保存全部GUI,其中包括使用&quo ...

  3. 学习matlab GUI编程的一点点所得

    1.我应该在哪里加我的代码?             MATLAB自动为你做的工作:对控件执行默认操作时,matlab自动执行按钮的callback下的代码.       比如按钮,就是单击按钮一下. ...

  4. matlab转换为exe文件,matlab GUI编程及转换为独立运行的exe文件

    入门视频:https://www.bilibili.com/video/av20999810?from=search&seid=13641596054754955985 1.打开matlab ...

  5. Matlab GUI编程技巧(一):如何使gui编的界面一运行就居中

    有些时候在进行MATLAB GUI可视化界面编写时,需要将界面在运行时就处于居中状态.以下总结了两种方法: 方法一 假如当前的figure的句柄是h,则在程序运行的刚开始,用以下命令: set(h,' ...

  6. MATLAB GUI编程axes显示载入图片

    MATLAB GUI软件界面显示载入的.JPG图片分两种情况,一种是希望点击按钮后显示载入的图片.另一种情况是希望软件界面一开始就载入默认位置的图片. 启动MATLAB 2018b后,在命令行光标后输 ...

  7. MATLAB GUI编程中几个有用的程序段

    1.  启动 % 获取当前文件所在路径 currPath = fileparts(mfilename('fullpath')); % 切换工作路径到当前位置 cd(currPath); % 判断所用操 ...

  8. matlab能倒入crv文件么,[转载]matlab GUI 编程——mcc转换m文件到应用程序

    1.安装C编译器(前提是你的电脑已经安装了VC) >> mbuild -setup Please choose your compiler for building standalone ...

  9. textbox matlab,matlab gui 编程文本框更新

    本帖最后由 350954832 于 2014-12-6 07:38 编辑 我也是个新学matlab的菜鸟,有些东西也是不是特别的明白, 这个程序本来是一个界面  我想通过点击运行按钮,在左边的文本框里 ...

  10. matlab 加法器,Matlab GUI编程实例(加法器)

    布置好各控件以后,我们就可以来为这些控件编写程序来实现两数相加的功能了. 三.我们先为数据1文本框添加代码: 点击上图所示红色方框,选择edit1_Callback,或者是在数据1文本框出右键选择Vi ...

最新文章

  1. 开源自动机器学习(AutoML)框架盘点
  2. 面试----Object类
  3. php 获取 table,php – 获取表对象(App_Model_TableName)作为获取结果(Zend Framework)
  4. C语言,利用数组编写程序输入30个数,分别统计正整数,0,负数个数,并求和
  5. /etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc和~/.bash_logout
  6. 基于进程的游戏Server端架构设计
  7. centos6.5 conky安装配置
  8. 【无标题】排序算法(C语言)
  9. oracle exadata效果,exadata成功案例与性能测试-oracle.pdf
  10. 李宏毅2022机器学习hw5
  11. Python学习笔记(三)(图灵学院)
  12. Unity基础-灯光
  13. 计算机作用对象失败怎么办,虚拟电脑控制台严重错误—获取VirtualBox COM 对象失败的解决办法...
  14. MPC5748G S32_SDK_PA_RTM_3.0.0 GPIO 调试仿真设置
  15. mysql 怎样解锁表_mysql一键解锁表
  16. android 投屏截图,手机投屏到电脑上怎样截图?图片格式可以这样设置
  17. 黄金思维圈,养成透过现象看本质的能力
  18. 句柄数、连接数、线程数等查询
  19. box模型之margin
  20. libxml2生成,解析,修改xml文件,以及使用实例

热门文章

  1. FCM算法研究(一)
  2. PhotoShop 2022安装教程(附安装包)
  3. 用计算机画图评课稿,小学信息技术三年级下册《图形的复制与粘贴》说课稿
  4. Multisim实现D触发器模拟异步计数器
  5. matlab风玫瑰图,基于Matlab的风玫瑰图绘制
  6. 对面板数据模型中的一些理解
  7. 成都电子信息学校计算机专业,成都电子信息学校2020招生简章
  8. 2022年上半年软件设计师(软考)————考后总结
  9. 恶意代码防范技术原理-恶意代码概述
  10. MSN Messenger的用户管理