(完整版)MatlabGUIDE使用说明(MatlabGUI界面)
- 格式:doc
- 大小:29.80 KB
- 文档页数:8
今天由于要帮一朋友用matlab处理一幅图片,处理图片的要求其实很简单,就是把图片加载进matlab中,然后显示出想要的某一列的趋势图来。
如果用代码写的话,程序如下:x=imread(‘文件路径\*.jpg’);figure(1);plot(x(:,100)); %假如要显示的是图像的第100列的趋势图显示效果如下图所示:虽然用M文件写两句很简单,不过带着感情,追求更好是我们永恒的动力,首先用M文件时候人机界面不友好,的看很多的代码,尤其对不太熟悉M编程的的人而言即使很简单也看着比较郁闷,因此我们接下来用matlab中的GUI来完成这个简单的例子,当然编程起来比这个复杂多,但是对使用者而言确很简单清楚。
这个就如同VC中的MFC和WINDOWSFORMS一样。
做成的都是人机交互界面。
不废话了,看例子。
首先打开MATLAB,要新建一个MATLAB GUI 程序有三种方法,这里我直接在命令窗口里输入guide,新建一个空的GUI程序,选择如下图:新建好的GUI编程界面如下图,上面无非就是菜单,工具,还有编程用到的控件,还有编程的用户窗口。
这个和LABVIEW有点像。
不过LABVIEW的前面板都是用控件拖出来的,后面板也是拖控件画出来的。
而GUI的显示界面是拖控件画出来的,其中一些属性参数要设置下,而后面的执行这些控件的都是写的M函数,即后面板都是要写代码的,这个比LABVIEW单纯的画程序要难,当然灵活性也大,不过个人感觉没一个简单的,都难呀。
至于上面控件的意思,怎么拖请自己看吧,若学过MFC或者WINDOWSFORMS的人就会很容易理解的,这之间是太像了,呵呵。
我们的目的是显示图片,并且显示需要的某一列的趋势图。
为了使人机交互更好点,我们可以使加载图片时和我们选择打开文件夹那样完成,即自己选择路径,而不用每次在M文件里改路径。
还有我们要求在加载图片完成时立马显示出这幅图片的大小信息,即多少行,多少列。
MATLAB实用教程GUIMATLAB是一种功能强大的科学计算软件,在各个领域中被广泛应用。
除了提供基础的数值计算和数据可视化功能之外,MATLAB还提供了可视化编程界面(GUI)工具箱,方便用户通过交互式界面进行操作和数据分析。
本篇文章将介绍一些MATLAB实用教程GUI的相关内容。
首先,我们需要了解什么是GUI。
GUI是Graphical User Interface的缩写,即图形用户界面。
通过GUI,用户可以通过鼠标、键盘等输入设备与计算机进行交互,而不需要通过命令行输入指令。
MATLAB提供了一系列功能强大的GUI工具箱,用于创建各种形式的图形用户界面。
创建GUI的第一步是打开MATLAB的Guide工具箱。
Guide是一个可视化开发环境,提供了创建GUI界面和添加交互元素的功能。
打开Guide 后,用户可以通过拖放控件、设置属性等方式创建界面,并将其与MATLAB代码关联起来。
在Guide中,用户可以使用不同的布局管理器(layout manager)来组织和调整界面中的控件位置和大小。
常用的布局管理器包括网格布局(grid layout)、组框布局(box layout)等。
用户还可以为每个控件设置属性,如字体、颜色、大小等。
对于每个控件,用户可以为其添加特定的回调函数。
回调函数是一个用户定义的函数,在特定事件(如按钮点击、输入框输入等)发生时被调用。
通过回调函数,用户可以定义GUI与MATLAB代码之间的交互逻辑。
在编写回调函数时,用户可以使用MATLAB的各种功能。
例如,用户可以使用MATLAB的函数库进行数据处理和分析,绘制图表和绘图,并将结果显示在GUI界面中。
用户还可以使用MATLAB提供的各种工具和函数库进行图像处理、信号处理等。
创建一个GUI界面的一个常见实例是绘制函数图像。
用户可以在界面中添加一个绘图区域和一些滑动条或按钮,用于调整绘图的参数。
在绘图区域中,用户可以绘制函数图像,并随着滑动条或按钮的调整,实时更新绘图结果。
去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录。
从简单的例子说起吧。
创建Matlab GUI界面通常有两种方式:1,使用 .m 文件直接动态添加控件2. 使用GUIDE 快速的生成GUI界面显然第二种可视化编辑方法算更适合写大型程序。
一:创建GUI1.在 .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:菜单编辑器。
如果没有图形用户界面(GUI)我们只能从命令行(Command Window)中调用相关程序,这相对比较繁琐,并且不是所有用户都是这个能力。
就好比计算机的 DOS 系统,在有windows的情况下,您会选择DOS吗?当然我们也不排除骨灰级的人物!在本节教程我们主要针对没有G UI 创建和使用经历的网友,但是必要的M ATLAB基础知识是需要的。
在教程中我们将创建一个简单的GUI程序,它执行两个数的加法运行,然后显示其运算结果。
一、打开和创建GUI界面1、首先打开Matlab,在Command Window中输入guide回车2、此时打开GUI编辑器GUIDE(GUI Developer的缩写)2.1 界面上有两个标签也“Creat New GUI”和“Open Existing GUI”如果创建新的GUI此时我们选择第一个标签页,但如果打开其它已经存在的GUI 就点击第二个标签吧2.2 这里我们选择第一个标签下的“Blank GUI”(空白 GUI),下面还有几个系统GUI模版,你可以根据需要选择其它的。
2.3 点击“OK”我们正式进入GUIDE界面,呵呵,是不是感觉似曾相识3、添加你需要的控件到figure中在添加控件之前,您最好对您的GUI界面布局已经有一定的构思了,否则盲目性太大了不利于您的编程。
下面是我们构思的布局。
二、添加控件和设置属性在正式讲解之前,我们先讲解下GUI中的鼠标基本操作(a) 在左边的控件面板中鼠标左击选择您需要的控件,然后放开鼠标(b) 在右边的figure中按住左键,画出您的控件,于是空间就在figure上(c) 你可以用鼠标拖拽figure上所有控件,来改变他们的位置(d) 在控件上双击鼠标左键(右击是快捷菜单)可打开控件属性面板1、从上面的布局构思,我们知道本GUI需要以下控件:三个“编辑文本框”(Edit Text):三个“静态文本框”(Static Text):一个“确定按钮”(Pushbutton)按照上面介绍的鼠标操作方法,将这6个控件拖到右边的figure中,如下图所示2、接下来就是编辑这些控件的属性好,下面从Static Text开始吧,双击其中一个“静态文本块”,将跳出该控件的“属性查看器”(Property Inspector)GUI控件的几个常用属性说明如下:position:指示空间在figure中的位置font**:字体相关属性string:相当如VB中的caption,就是显示在控件上的文字tag:控件的唯一标识符,相当于ID,我们需要tag来指定某一个空间2.1 在这里我们修改它的“string”属性为“+”2.2 同理修改它的“fontsize”属性为20在编辑完这些属性后,直接点击右上角的“关闭”按钮,关闭属性查看器,此时属性会自动保存。
Matlab GUI 常用操作菜单1.编辑菜单打开GUIDE,选择工具栏上面的菜单编辑按钮2.添加菜单回调函数(callback)菜单编辑完成保存后,在fig对应的m文件中会自动生成菜单的回调函数声明例如菜单tag名为menuFilePrint,则对应的callback函数为:function menuFilePrint_Callback(hObject, eventdata, handles)可以在该函数内添加代码实现功能。
3.菜单项访问获取菜单句柄在matlab的函数中要对某个菜单进行访问,必须获得该菜单的句柄。
如果是在菜单的回调函数里面,hObject就是该菜单的句柄;如果是在其他的函数里面要获得某一菜单的句柄,比如选中工具栏上的ZoomIn按钮,按钮处于被按下状态,同时要设置对应菜单项view->Zoom-Zoom In 为选中状态,如下图:这里要在按钮“ZoomIn”的callback函数里面实现对菜单menuViewZoomIn的状态设置。
首先得获得菜单的句柄:% first we must get the handle of menuZoomInhFigChildren = allchild(gcf);% menuView handlehMenuView = findobj(hFigChildren,'Tag','menuView');hvc = allchild(hMenuView);% menuViewZoomhViewZoom = findobj(hvc,'Tag','menuViewZoom');hvzc = allchild(hViewZoom);%menuZoomIn handlehZoomIn = findobj(hvzc,'Tag', 'menuZoomIn');获取设置菜单状态得到菜单的句柄后就可以得到菜单当前的状态了:if strcmp(get(hZoomIn, 'Checked'),'on')set(hZoomIn, 'Checked', 'off');elseset(hZoomIn, 'Checked', 'on');end工具栏1.不显示工具栏1)GUIDE开发界面在对应的m文件中找到function Main_OpeningFcn(hObject, eventdata, handles, varargin)在该函数里面添加:set(hObject,'Toolbar','none');2)M文件开发hMainFigure = figure(... % The main GUI figure'MenuBar','none', ...'Toolbar','none', ...'HandleVisibility','callback', ...'Color', get(0,...'defaultuicontrolbackgroundcolor'));2.显示“Figure”工具栏set(hObject,'Toolbar','figure');3.添加自定义工具栏set(hObject,'Toolbar','none');hToolbar = uitoolbar(hObject);hNewPushtool = uipushtool(... % Open toolbar button'Parent',hToolbar,...'TooltipString','New File',...'CData',imread('New.bmp'));'HandleVisibility','callback', ...'ClickedCallback', @hOpenMenuitemCallback);4.获取工具栏句柄% get toolbar handlehToolbar = findall(gcf,'Type','uitoolbar');if isempty(hToolbar), return, end5.获取figure工具栏按钮的tag值% get toolbar handlehToolbar = findall(gcf,'Type','uitoolbar');if isempty(hToolbar), return, end% get all childrenhChildren = allchild(hToolbar);if isempty(hChildren), return,endhTags = get(hChildren, ‘Tag’);hTags保存了工具栏所有按钮的tag值:6.获取设置figure工具栏按钮的callback函数%reset callback function for "Zoom in"hZoomIn = findobj(hChildren,'Tag','Exploration.ZoomIn');set(hZoomIn,'ClickedCallback',@tbZoomIn_Callback);function tbZoomIn_Callback(hObject, eventdata)% hObject handle to tbZoomIn (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB 7.删除figure工具栏按钮% set figure toolbar firstset(hObject,'Toolbar','figure');% get toolbar handletbh = findall(hObject,'Type','uitoolbar');if isempty(tbh), return, end% toolbar buttons collectionhChildren = allchild(tbh);if isempty(hChildren), return, end% delete data cursor buttonhDeleted = findobj(hChildren,'Tag','Exploration.DataCursor');delete(hDeleted);8.设置figure工具栏按钮的状态% get toolbar handlehToolbar = findall(gcf,'Type','uitoolbar');if isempty(hToolbar), return, end% get all childrenhChildren = allchild(hToolbar);if isempty(hChildren), return,endhTags = get(hChildren, 'Tag');% find "Zoom In" buttonhb = findobj(hChildren,'Tag','Exploration.ZoomIn');if isempty(hb),return, end% set stateif strcmp(get(hObject, 'Checked'),'on')set(hObject, 'Checked', 'off');set(hb,'State', 'off');elseset(hObject, 'Checked', 'on');set(hb,'State', 'on');end。
Matlab GUIDE使用总结--Matlab GUI界面(zz)去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录。
从简单的例子说起吧。
创建Matlab GUI界面通常有两种方式:1,使用 .m 文件直接动态添加控件2. 使用GUIDE 快速的生成GUI界面显然第二种可视化编辑方法算更适合写大型程序。
一:创建GUI1.在 .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:菜单编辑器。
去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录。
从简单的例子说起吧。
创建Matlab GUI界面通常有两种方式:1,使用 .m 文件直接动态添加控件2. 使用GUIDE 快速的生成GUI界面显然第二种可视化编辑方法算更适合写大型程序。
一:创建GUI1.在 .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分别为鼠标点击和按键事件CallbackCallBack为一般回调函数,因不同的控件而已异。
例如按钮被按下时发生,下拉框改变值时发生,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});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});elsegui_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,[])这样的调用就可以调用文件里面的子函数。