最近在用Matlab的guide来写GUI界面,就记录一些我对GUI界面的理解。 首先是函数中都有的那些参数hObject,eventdata和handles,其中eventdata我用的2017b的Matlab的官方注释是将在未来版本中定义。 这个就先不管。
先看hObject和handles。 他们的作用很相似,hObject和handles的官方解释是句柄,一直没有很搞懂,现在终于明白了一些。 我的理解是GUI界面中的元素就是句柄,或者更加通俗一些的解释,把handle当成C++或是Java中的类类型,而handles就是类的名称,要调用类中的元素就要用到handles。 下面列出了一些常用的元素,当然可以自己随意改变名称: 比如有pushbutton按钮,slider滑动条,radiobutton单选框,checkbox勾选框,edit输入框,popupmenu弹出窗口。 举个实例, 比如这里我要实现的功能是改变勾选checkbox以后显示在text1中显示文字’hello’,就可以这样写
function checkbox1_Callback(hObject, eventdata, handles) set(handles.text1,'string','Hello','FontSize',18)而hObject和handles的区别就在于hObject是自己,有点像this指针。而handles提供访问全局信息的能力。 比如上一例子中hObject = handles.checkbox1。 也举个例子,获取当前下拉菜单的索引值,和具体的值:
function popupmenu1_Callback(hObject, eventdata, handles) sel = get(hObject,'string');%获取下拉菜单当前选项的索引值 choose = get(hObject,'value');%获得索引值 sel{choose}%存储的时候是cell格式,这样才能取得正确的值总结: 1.要使用handles一般是改变其他元素,交互式的,比如点某一个按键,显示图片。 2.而hObject则是自身元素。
而每一个元素又有很多的属性,我的理解是C++中的结构体或是另一个类,这个类中也有很多属性,一般是公有的属性, 比如我目前用到的有’value’索引值,'visible’可视化,'BackgroundColor’背景颜色,'string’值。
还有其他一些小内容:gcf = figure(‘当前图像’) 1.切换图像:原理是隐藏当前图像,打开要打开的图像的句柄
set(gcf,'visible','off'); h = figure(新图像); set(h,'visible','on');2.运行命令: 要运行的程序为fun.m
run('fun')3.要同一个界面上画多幅图像:
axes(handles.axes1) 画图命令(不加figure或是subplot命令) axes(handles.axes2) 画图命令4.改变下拉菜单中的内容:
set(handles.popupmenu1,'string',{'A','B'})5.显示Latex公式,目前我只知道text命令支持:
hAxes = axes('units','normalized','position',[0,0,1,1],'visible','off');%作用是划分figure区域为[0 0 1 1] text(0.17,0.85,['$','\omega_{R}(n)=R_{N}(n)','$'],'interpreter','latex','fontsize',18);6.实时显示时间
T=timer('tag','timer1','BusyMode','queue','ExecutionMode','fixedrate','period',1,'timerfcn',{@t_update,handles}); start(T); function t_update(obj,event,handles)%显示时间要定时刷新 xingqi={'日','一','二','三','四','五','六'}; %星期字符串 set(handles.text2, 'String',[datestr(clock, 31) ' 星期' xingqi{weekday(now)}],'FontSize',15);推荐一本学习Matlab的UI设计的好书,MATLAB GUI设计学习手记 这里可以下载源码源码下载可以学习到很多。