转载:关于Matlab GUI的一些经验总结
- 注:此文来自转载,侵删
去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始
,一定要勤写记录。- 从简单的例子说起吧。
- 创建Matlab GUI界面通常有两种方式:
- 1,使用 .m 文件直接动态添加控件
- 2. 使用 GUIDE 快速的生成GUI界面
- 显然第二种可视化编辑方法算更适合写大型程序。
- 一:创建GUI
- 1.在 .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));']);
- 2.使用GUIDE帮助创建GUI
- 在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 GUI程序中进行值传递我经常使用的两种方法:
- 1.利用主函数 的 handles 数据结构传值
- 例如在某一个图像窗口句柄 中有一个对象 handles(可以定义自己的数据结构)
- 那么在一个子Callback函数中,可以通过handles传递数据:
- function sliderbar1_Callback(hObject,eventdata,handles)
- %% eg1
- v1=get(hObject,'value');
- obj=handles.Text1 %直接定位 Tag 为 Text1的控件
- set(obj,'value',v1);
- %% eg2
- handles.MyStruct.P1=v1; % 更改handles中的数据
- guidata(hObject,handles); %更新 handles !!重要
- end
- 2.利用控件的 UserData 来传值
- 每一个控件一般都有一个属于自己的自定义域,userData,你可以定义这样一个域用来保存自己的数据,例如在定义 timer 的 TimerFcn中
- t1=timer('TimerFcn',{@Timer1Fcn},'ErrorFcn',@Timer1ErrorFcn},'Period',1.0,'ExecutionMode','fixedrate');
- t1.Userfata=handles.MyStruct;
- 这里 Timer1Fcn的调用看似没有传入任何参数,实际上此函数的定义一定要有至少两个参数
- function Timer1Fcn(obj,eventata)
- obj.UserData=XXXXX;%可以这样共享数据
- end
- 当然Timer定义的时候允许这样传递一个参数,当然这样也可以进行传值.
- t1=timer('TimerFcn',{@Timer1Fcn,handles},'ErrorFcn',{@Timer1ErroFcnr,handles},'Period',1.0,'ExecutionMode','fixedrate');
转载:关于Matlab GUI的一些经验总结的更多相关文章
- 关于Matlab GUI的一些经验总结
注:此文来自转载,侵删去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录. 从简单的例子说起 ...
- [转载] 关于matlab GUI的一点心得
转载自 落落轻尘 [Fig文件方式,即使用菜单File->New->GUI来设计界面] 首先值得注意的是,在低版本matlab上制作的含GUI的m文件一般不能在高版本的matlab上面运行 ...
- matlab GUI界面编程总结
去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录. 从简单的例子说起吧. 创建Matlab ...
- MATLAB GUI之ABC
GUIDE 属性设置 name 更改名字 logo 在GUI的".m"文件中的OpeningFcn函数或者OutputFcn函数中添加以下代码: % 设置页面左上角的 LogoI ...
- Matlab GUI设计中的一些常用函数
Matlab GUI常用函数总结 % — 文件的打开.读取和关闭% — 文件的保存% — 创建一个进度条% — 在名为display的axes显示图像,然后关闭% — 把数字转化为时间格式% — ch ...
- Matlab GUI界面
做SVD的时候,看学姐的demo,用到了matlab的GUI,感兴趣就自己学了一下: 从简单的例子说起吧. 创建Matlab GUI界面通常有两种方式: 1,使用 .m 文件直接动态添加控件 ...
- matlab GUI保存axes(坐标轴)上的图像
1.默认方式 matlab GUI默认菜单的保存图像默认为保持全部GUI,包括使用" 菜单->编辑->复制图形". 2 保存可见区域 2.1 代码 [FileName, ...
- [学习一个] Matlab GUI 学习笔记 Ⅰ
Matlab GUI 学习笔记 Ⅰ 1. Foreword Matlab 是严格意义上的编程语言吗?曾经有人告诉我他是通过 Matlab 学会了面对对象编程,我是不信的,但这依然不妨碍它在特殊领域的强 ...
- Matlab——GUI初涉
Matlab——GUI初涉 MATLAB GUI教学视频0:GUI中的基本操作—在线播放—优酷网,视频高清在线观看http://v.youku.com/v_show/id_XMjM2Mjk0MjM2. ...
随机推荐
- html-php深入理解
不再纠结div p span. 写html的时候, 在头脑中, 要等同于/实际上就相当于写一篇图文混排的word文档, 有主标题/子标题, 有正文段落等等. 要根据这些标签的本身的语义来使用! div ...
- ubuntu显示桌面的快捷键,以及修改方法
在ubuntu下面,快速显示桌面,你可以这样做. 1,ctrl+alt+d (默认的) 2,alt+tab 可以切换到桌面 但是我想把它修改成和windows一样的,我该怎么做呢? 其实很简单. 系统 ...
- 把Linux安装到移动硬盘上
把Linux安装到移动硬盘上 转载于:http://mrkh.me/install-linux-on-a-portable-hard-drive.html 这一篇文章讲一下,怎么把linux安装到移动 ...
- javascript单例模式的理解
javascript单例模式的理解 阅读目录 理解单例模式 使用代理实现单例模式 理解惰性单例 编写通用的惰性单例 单例模式使用场景 回到顶部 理解单例模式 单例模式的含义是: 保证一个类只有一个实例 ...
- TaskTracker任务初始化及启动task源码级分析
在监听器初始化Job.JobTracker相应TaskTracker心跳.调度器分配task源码级分析中我们分析的Tasktracker发送心跳的机制,这一节我们分析TaskTracker接受JobT ...
- 12 day 1
#include <cstdio> int i,j,m,n,t; long long f[6000][6000]; inline int min(int a,int b){ return ...
- 绕过 <?PHP exit('Access Denied'); ?> 限制
绕过 <?PHP exit('Access Denied'); ?> 限制 <?php $shellcode='PD9waHBpbmZvKCk7Pz4';// base64_ ...
- 查看别人的css
ie工具栏的“文件”选项选“另存为”到你本地电脑,存下来有两个文件 一个是空间名称命名的文件夹和html网页,文件加里有三个扩展名为.css的文件
- mysql lower,upper实现大小写
mysql的lower和uppper函数可以将指定字符串转换为小写和大写 select lower('OutSpringTd') as lowerCase, upper('OutSpringTd') ...
- iOS 使用Storyboard 和 xib时的一些知识
以前不太使用xib和storyboard进行布局,后来在工作中参与到了一个项目的维护工作,那个项目就是使用stroyboard的,再加上xcode5对stroyboard的大力支持,就在这里对于使用s ...