一、概要
MATLAB GUI是MATLAB用户图形接口,主要完成MATLAB图形界面程序。其实MATLAB的界面在运行效率上必定是不如其他语言,但是如果你想很方便的结合MATLAB中各种好用的函数或者工具箱,那就用MATLAB GUI吧。MATLAB GUI使用方式与MFC十分类似,而且对于熟悉MATLAB的人来所,上手非常容易,MATLAB还有命令窗口,使得在调试过程中也占有很大的优势。本文将完成一个作图程序,点击按钮会按顺序在坐标轴中作图。
二、GUIDE界面
在命令窗口键入guide,回车即可进入MATLAB GUIDE启动界面,
直接确定即可进入GUIDE主界面,
此时是一个空的界面,中间就是界面窗口了,左边是控件栏,包含了SELECT,PUSH BUTTON,RADIO BUTTON,EDIT TEXT,POP-UP MENU,TOGGLE BUTTON,AXES,BUTTON GROUP,SLIDER,CHECK BOX,STATIC TEXT,LISTBOX,TABLE,PANEL,ACTIVEX CONTROL。上面是菜单栏(不介绍了),还有工具栏,工具栏中比较重要的就是MENU EDITOR(菜单编辑器),TOOLBAR EDITOR(工具栏编辑器),EDITOR(文件编辑器),ROPERTY INSPECTOR(属性查看器,用来查看界面中各控件属性),OBJECT BROWSER(对象查看器,查看整个界面的对象层次)。
这里比较抢眼的莫过于ACTIVEX CONTROL了,将此控件拖拽到界面窗口中,就会出现ACTIVEX控件的选择窗口,
左边控件列表中会显示MATLAB在你的电脑中检测到的ACTIVEX控件,而右边就是缩略图,右下角有选中控件的路径。选好控件确定后就将控件加入到你的界面中了。关于MATLAB的ACTIVEX CONTROL不是本文重点,略过了,有需要的查找一下MATLAB ACTIVEX控件相关资料吧(这功能貌似很牛的样子)。
三、 文件
将界面保存后,保存的文件有两个,XX.FIG和XX.M。.FIG文件就是GUIDE的界面文件了,而.M文件是回调函数存在的文件了。
在界面窗口的鼠标右键菜单中选择VIEW CALLBACKS中的回调函数即可进入EDITOR编辑该回调函数了。
四、 参数传递
在本人的另一篇文章《关于MATLAB的GUI一些实用小技巧》中有介绍到我最推荐的方式,采用setappdata和getappdata来进行参数的传递。基本语法如下,
setappdata(handle, 'varname', value)
value = getappdata(handle, 'varname')
五、SET和GET函数
SET和GET函数在使用控件时最重要的函数,分别是设置和获取控件属性值的函数。语法如下,
set(handle, 'property', value)
value = get(handle, 'property')
六、控件
后面的例程中仅使用到这两个控件,PUSH BUTTON按钮和AXES坐标轴。
拖拽按钮和坐标轴空间至界面窗口如图所示,
双击PUSH BUTTON即可看到按钮的属性,如图所示,
tag是句柄标识,GUIDE自动创建的句柄在程序内部以此作为标识。例如此处,引用按钮句柄的方式为handles.pushbutton2。而string是显示在按钮上的字符串。坐标轴的tag为axes2。
控件的使用非常类似,主要是设置不同的属性以及回调函数的使用。在后面的实例中将使用的是在按钮的回调函数中对按钮的string属性值的修改,以及在axes中作图。
七、回调函数
右击按钮,VIEW CALLBACKS,BUTTONDOWNFCN,MATLAB会自动跳至
function pushbutton2_ButtonDownFcn(hObject, eventdata, handles)
这就是按钮的鼠标左键点击事件的回调函数,参数hObject是当前句柄,这里就是按钮的句柄,与handles.pushbutton2一样。eventdata是MATLAB预留参数,供后续扩展用,现在没用,略过,handles是句柄结构体,包含了整个界面中所有控件的句柄。
在回调函数下添加如下代码,
order = getappdata(0,'guitest'); % 获取order,标识作图的顺序
if isempty(order)
order = 0;
else
order = mod(order+1,3);
end
setappdata(0,'guitest',order) %保存order
axes(handles.axes2) %指定当前坐标轴为界面中的坐标轴
switch order %根据order绘制图形
case 0
set(hObject,'string','second') %改变按钮显示字符串
plot(1:10) %绘图
case 1
set(hObject,'string','third')
plot(sin(1:10))
case 2
set(hObject,'string','first')
plot(rand(10,1))
end
这里在根句柄中保存了数据,在退出程序时需要将保存数据删除,在界面的关闭回调函数中加入代码,
function figure1_CloseRequestFcn(hObject, eventdata, handles)
order = getappdata(0,'guitest');
if ~isempty(order)
rmappdata(0,'guitest') %删除数据
end
完成数据的删除。
八、blah blah
到这里就结束了,可以将.fig和.m文件保存运行,就可以看到一个简单的作图程序了。本文只是给出了一个极其简单的例子,但是GUI的使用,大部分过程均于此类似(当然除了需要做的复杂运算啥的,自己加吧)。
程序运行,
作图一次,
作图2次,
作图3次,