matlab对话框 齐鲁工业大学.docx

上传人:b****5 文档编号:27690674 上传时间:2023-07-04 格式:DOCX 页数:13 大小:43.11KB
下载 相关 举报
matlab对话框 齐鲁工业大学.docx_第1页
第1页 / 共13页
matlab对话框 齐鲁工业大学.docx_第2页
第2页 / 共13页
matlab对话框 齐鲁工业大学.docx_第3页
第3页 / 共13页
matlab对话框 齐鲁工业大学.docx_第4页
第4页 / 共13页
matlab对话框 齐鲁工业大学.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

matlab对话框 齐鲁工业大学.docx

《matlab对话框 齐鲁工业大学.docx》由会员分享,可在线阅读,更多相关《matlab对话框 齐鲁工业大学.docx(13页珍藏版)》请在冰豆网上搜索。

matlab对话框 齐鲁工业大学.docx

matlab对话框齐鲁工业大学

MatlabGUIDE使用总结--MatlabGUI界面(zz)

去年做了一些关于MatlabGUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录。

  从简单的例子说起吧。

  创建MatlabGUI界面通常有两种方式:

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

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

显然第二种可视化编辑方法算更适合写大型程序。

一:

创建GUI

1.在.m文件中动态添加

例如

h_main=figure(‘name’,‘ademoofguidesign’,‘menubar’,‘none’,…

  'numbertitle','off','position',[100100300100]);

h_edit=uicontrol('style','edit','backgroundcolor',[111],'position',[20205020],...

  'tag','myedit','string','1','horizontalalignment','left');

h_but1=uicontrol('style','pushbutton','position',[20505020],'string','INC',...

  'callback',['v=eval(get(h_edit,''string''));',...

     'set(h_edit,''string'',int2str(v+1));']);

h_but2=uicontrol('style','pushbutton','position',[80505020],'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编辑视图,可以使用如下工具:

LayoutEditor:

布局编辑器;

AlignmentTool:

对齐工具;

PropertyInspector:

对象属性观察器;

ObjectBrowser:

对象浏览器;

MenuEditor:

菜单编辑器。

二:

使用控件

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

1.静态文本(StaticText)      2.编辑框(EditText)控件

3.列表框(Listbox)控件         4.滚动条(Slider)控件

5.按钮(PushButton)控件      6.开关按钮(ToggleButton)控件

7.单选按钮(RadioButton)控件      8.按钮组(ButtonGroup)控件

9.检查框(CheckBox)控件      10.列表框(Listbox)控件

11.弹出式菜单(PopupMenu)控件   12.坐标轴(Axes)控件

13.面板(Panel)控件

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

      一、控件风格和外观

      

(1)BackgroundColor:

设置控件背景颜色,使用[RGB]或颜色定义。

      

(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('Pleasepressme!

','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文件:

functionvarargout=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',  []);

ifnargin&&ischar(varargin{1})

  gui_State.gui_Callback=str2func(varargin{1});

end

ifnargout

   [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,不过那样的话,数据传递会麻烦一些。

下面看figureOpenningFunction

%================================

functionMain_OpeningFcn(hObject,eventdata,handles,varargin)

handles.output=hObject;

%通常在这里面定义自己的数据结构例如

s=struct("P1",v1...

            "P2",v2);

handles.MyStruct=s;

%更新handles数据结构非常重要!

guidata(hObject,handles);

%================================

functionvarargout=Main_OutputFcn(hObject,eventdata,handles)

varargout{1}=handles.output;

这个函数是输出返回值的定义

注意:

matlab中,function对应的end可以没有,但是随着版本的更新,end将会被要求。

六:

数据传递

在matlabGUI程序中进行值传递我经常使用的两种方法:

1.利用主函数的handles数据结构传值

例如在某一个图像窗口句柄中有一个对象handles(可以定义自己的数据结构)

那么在一个子Callback函数中,可以通过handles传递数据:

functionsliderbar1_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的调用看似没有传入任何参数,实际上此函数的定义一定要有至少两个参数

functionTimer1Fcn(obj,eventata)

  obj.UserData=XXXXX;%可以这样共享数据

end

当然Timer定义的时候允许这样传递一个参数,当然这样也可以进行传值.

t1=timer('TimerFcn',{@Timer1Fcn,handles},'ErrorFcn',{@Timer1ErroFcnr,handles},'Period',1.0,'ExecutionMode','fixedrate');

GUIDE生成的GUI的M文件控制了你编制的GUI界面的所有属性和行为,或者说外观和对用户操作的响应。

比如说按下一个按钮或者选择了一个菜单项之类。

M文件包括了运行你整个界面程序所需要的全部代码,包括所有GUI组件的CALLBACKS函数。

其实这些callbacks函数算是M文件里的子程序,callback里面就填写你所期望程序做的动作,比如画一个图或者算一个算式。

一M文件的数据管理模式-----------------------------------------------------------------

SharingDatawiththeHandlesStructure

用handles这个东西共享数据

  在你运行你的GUI的时候,M文件会自动生成一个叫做handles的东西(准确的说它属于handles类型的结构体,且取的名字也叫做handles),不用管那么复杂,只用知道你可以从它这里找到GUI的所有数据,比如说控件的信息,菜单信息,axes信息。

想象handles就是一个缸了,它里面装载了所有的信息,而且这个缸在各个控件的callback之间传来传去,理所当然那每个控件的callback都可以放入一些想放入的数据,也可以从里面取出任何想要的数据包括别的控件的信息(比如滑竿的当前值,edittext的当前值)和别的控件放进去的数据。

  所以,用handles可以达到的目的有两个:

--------------

  a,各个控件的callback的信息交换

------

  (current_data是随便设置的变量名)

  handles.current_data=X;在某控件下的callback写入这一句,就表示你把这个数据放缸里了

  guidata(hObject,handles);接着别忘了保存~!

  然后在你需要的地方把它从缸里捞出来

    X1=handles.current_data;

-------------

  b,读取GUI控件的信息,自然也可以设置GUI控件的信息(比如说背景色随着按钮点击而变换之类,或者你想让按钮A点一下,字符B跳一下,也行。

------

    all_choices是随便取的变量名,my_menu是你那个菜单项的TAG名字

    all_choices=get(handles.my_menu,'String');

    current_choice=all_choices{get(handles.my_menu,'Value')};

这样current_choice就得到了用户界面操作中,目录或者菜单的选择结果。

所以,要什么信息,直接用handles.你的对象就行了。

存什么信息也直接handles.你的对象  就行了。

如果是自己的数据,就.变量名;如果是控件信息,就用getset

二、M-File里的各个函数代表什么意思

  在设计面板设计排列好自己需要的各种按钮或者编辑框之后,下一步任务便是添加自己的响应代码。

  Openingfunction  添加在它名下的代码,在GUI开始运行但是还不可见的时候执行。

这里的代码一般都是做一些初始化工作的。

  Outputfunction  如果有需要,可以向命令行输出数据。

(这个函数我没用过,不多说了^_^)

  Callbacks  每一次点击按钮或者向输入框输入数据或者拖动滑竿,这些控件名下的callback就会执行一次。

---------------

  函数的输入参数

  M-File名下的全部function都会有这两个输入参数

  hObject  它代表的是当前的这个控件(也就是你点哪一个按钮或者拖的哪一个滑竿)

  handles  它代表的是现在这整一个GUI界面

  对这两个变量进行修改后

  guidata(hObject,handles);  进行保存,否则修改无效;

三、OpnningFunction

  这个函数名下的代码在界面可见之前执行。

其实你也可以在这个函数名下用handles.什么tag来获得组件的信息。

因为在Opnning函数之前,所有的组件就已经生成了,只不过openning函数是把这些组件‘打开’,让它们显示出来。

所以你可以在这个函数下面,添加代码,对界面做一些初始化工作。

比如,计算一些数据,显示一幅图或者别的什么工作。

  functionmy_gui_OpeningFcn(hObject,eventdata,handles,varargin)

  另外两个输入参数eventdata是matlab的保留参数,为以后开发准备的,我们不用管它。

varargin它里面保存了,传进来的命令行。

  varargin怎么理解呢?

-------------  

  my_gui('Position',[71.844.974.819.7])

%GUI也是函数,它只不过是有个界面的函数。

它的调用,同样是函数名(输入参数)。

  这里就表示GUI在打开时,位置这个属性被设置成了右边那个值。

也就是在这个位置打开GUI。

Position是你GUI界面的一个属性。

(要想知道各个控件有什么属性,在它上面双击就看到了。

)所以同样,也可以用这种方式输入其他的初始化命令。

  my_gui('路人甲','年十八')

  但如果你输入别的,左边那个根本就不是界面的属性名称。

这是输入的参数就保存在varargin里面。

也就是vararging{1}='路人甲'vararging{2}='年十八'。

  这样也可以达到向调用的GUI传入数据的目的。

四、OutputFunction

  Outputfunction

--------------------

  有输入自然就有输出,顾名思义,这个函数就是用来输出的。

functionvarargout=my_gui_OutputFcn(hObject,eventdata,handles)

%Getdefaultcommandlineoutputfromhandlesstructure

  varargout{1}=handles.output;

  这个函数不是我们自己编写的,也不是我们负责调用。

我们只用知道要传出去的数据,其实是放在vararout这个变量里面的。

但是我们在别的控件的callback是叫不到vararout这个变量的,因为你去看这些callback的输入参数里并没有vararout这个变量给它用。

所以我们只能间接修改handles.output这个变量。

(当然在后面别忘了添加guidata(hObject,handles);保存修改)

  因为默认的output函数里面varargout{1}=handles.output,也就是修改了vararout。

(所以知道了原理,output只是一个名字而已,你也可以用任意别的名字,或者添加更多的输出变量,只要在outputFcn下面添加varargout{2}=handles.第二个变量名。

类似)

  guidata(hObject,handles)之后不要立即delete窗口命令,因为这时候outputfcn没有再执行一次,也就是你刚刚修改的output并没有更新到varargin里面去。

  所以要么单独设计一个关闭按钮;要么跟uiwait(handles.figure1);uiresume合用。

五、Callbacks

回调函数

  当你对组件做点击或者别的动作,则自动调用相应的callback。

callback的名字取决于你的控件的tag和控件类型以及响应类型。

funct

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 卡通动漫

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1