Matlab GUI中的hObject&handles

Matlab GUI中的hObject与handles


①如果把figure对象当做一个大缸,把其它的对象如axes,button等当做这个大缸里的小缸,那么handles就相当于这个大缸的句柄,可以用大缸的句柄来设置小缸的属性,例如handles.pushbutton。hObject就相当于每个小缸的句柄了,可以直接再相应控件的function后面加set(hObject,‘propertyp’,‘value’);
②handles和hObject都“句柄”,储存了它所代表的“那个对象”的信息;只不过handles代表的是当前整个界面,hObject代表的是当前的这个空间(e.g. 按钮,编辑框);
③hObject是当前控件的句柄,handles包含了整个程序所有的句柄。在当前空间的callback里可以用hObject,也可以用handles.* ;在别的控件的callback里可以用handles. * 来调用别的空间的句柄;
④在Matlab GUI中,数据分为两种:GUI data和application data。两种数据的存取机制是相同的,但是GUI data使用起来比较方便。每一个GUI图形界面都维持一个和自己的界面的图形(figure)相联系的一个handles数据结构,这个数据结构中容纳图形界面内所有控件(按钮、列表框、编辑框等)的句柄,相当于一个大的“容器”,里面存放了figure内所有控件的句柄。同时,handles结构也可以被figure内所有控件的回调函数访问,因为回调函数的输入参数中都有handles结构。此外,在控件的回调函数内可以把数据存到handles结构中。
handles结构数据的取得和存储是通过guidata函数来实现的;
e.g. 在编辑框edit的回调函数内想获得编辑框的句柄,hObject 可以,也可以用handles.edit,这两个值是一样的,没有区别,只不过获得控件句柄的方式不同而已;hObject是调用回调函数时直接传递过来的,handles.edi是从handles结构中获取的。但,在控件的creatfcn函数中,如果想要访问控件,必须用hObject,而不能用handles.edit,因为此时控件还没被创建,其句柄还没加入到handles结构中。
各个控件的回调函数中,hObject的值是不一样的,分别代表调用回调函数的控件的句柄,而handles结构却是一样的。这种机制便于figure内的不同控件的回调函数内传递数据;
⑤h:指回调函数被调用对象的句柄;handles:是包含GUI中所有组件句柄的结构体,该结构体的域名由对象的tag属性定义。也可以用来传递数据给其它的回调函数和主程序。
e.g. :创建一个包含button的GUI,button的tag属性设为pushbutton1,GUIDE在应用程序,M文件中生成如下回调函数:
functionpushbutton1_callback(h,evendata,handles,varargin)然后设置button的callback
mygui(‘pushbutton1_callback’,gcbo,[],guidata(gcbo))其中:mygui:FIG文件名。pushbutton1_callback:回调函数名。gcbo:返回按钮句柄;[]:空矩阵;guidata(gcbo):从图形窗口的应用程序数据中获得句柄结构体。

你可能感兴趣的:(概念)