MATLAB GUI的一些认识
2017-08-11 15:54
162 查看
每一个GUI程序的开头都有这么一段程序,如下所示,那么这段程序到底是什么意思呢?首先来解释一下 。
function varargout = tte(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @tte_OpeningFcn, ...
'gui_OutputFcn', @tte_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
运行该GUI时,程序首先从主函数的入口点开始运行,即从function varargout = tte(varargin)开始运行。
1、gui_Singleton = 1;保证只能运行该GUI程序的一个实例,即只能打开一个窗口。
gui_Singleton = 0;允许该GUI程序可以运行多个实例,即可以打开多个窗口
2、
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @tte_OpeningFcn, ...
'gui_OutputFcn', @tte_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
该结构描述了该GUI的名字、运行实例、初始化函数、输出函数、布局以及回调函数。
3、
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
然后程序通过gui_State.gui_Callback=str2func(varargin{1});分别取得figure和包含的控件的CreateFcn回调函数,创建各个控件。
4、figure和各控件创建完毕,程序会调用OpengingFcn进行初始化,然后运行OutputFcn,把figure的句柄作为输出函数输出。GUI界面便在屏幕上显示出来。
5、此后程序处于等待状态,等待用户的操作。程序在调用gui_mainfcn函数时,会给figure以及各控件加一个事件监听器(listener),用来监听用户对figure以及各控件的操作。例如:用户用鼠标点击一个pushbutton按钮时,程序会监听到这个时间,然后调用该按钮的回调函数pushbutton_callback,对事件进行处理。用户点击figure的关闭按钮时,会调用其CloseRequestFcn回调函数,执行关闭窗口的操作等等。
程序在主函数里调用figure及格控件的CreateFcn函数创建完各控件后,下一步的任务就是要显示figure以及各控件。这时程序会调用其OpeningFcn函数,用户如果想初始化各控件的数值以及和figure相关联的handle结构的数值,代码就可以放在这里。注意:要调用guidata(hObject,handles);函数保存所做的修改。
在OpeningFcn函数中有一条代码:handles.output=hObject;是matlab gui自动加上的,目的是把该GUI Figure的
句柄当作输出函数传递出去。handles.output是matlab guide自动添加到handles结构中的变量,用来传递输出参数,我们可以修改这个变量名,如:用handles.myoutput代替,只是要和OutputFcn中的varargout{1}=handles.output;名字相对应就可以。
如果我们再OpengingFcn的最后没有调用uiwait(handles.figure1),则程序立马调用OutputFcn,并返回i,这时程序的输出参数就是figure的句柄,我们可以利用这个句柄来 操纵figure内的控件。例如,设置其数值等。如果我们再OpeningFcn的最后调用了uiwait(handles.figure1),则程序不会调用
OutputFcn, 而是等到用户完成操作,调用uiresume(handles.figure1)时才继续调用OutputFcn函数。
直到这时,程序才算执行完毕。接下来,程序会利用原先设定的监听器来监听用户的输入操作。如,按下pushbutton等。
用guide创建的GUI的整个工作过程就是这样。了解了其工作流程,我们可以在编程中灵活控制,而不用感到一头雾水了。
http://blog.csdn.net/zhaisharap/article/details/16856769
function varargout = tte(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @tte_OpeningFcn, ...
'gui_OutputFcn', @tte_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
运行该GUI时,程序首先从主函数的入口点开始运行,即从function varargout = tte(varargin)开始运行。
1、gui_Singleton = 1;保证只能运行该GUI程序的一个实例,即只能打开一个窗口。
gui_Singleton = 0;允许该GUI程序可以运行多个实例,即可以打开多个窗口
2、
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @tte_OpeningFcn, ...
'gui_OutputFcn', @tte_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
该结构描述了该GUI的名字、运行实例、初始化函数、输出函数、布局以及回调函数。
3、
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
然后程序通过gui_State.gui_Callback=str2func(varargin{1});分别取得figure和包含的控件的CreateFcn回调函数,创建各个控件。
4、figure和各控件创建完毕,程序会调用OpengingFcn进行初始化,然后运行OutputFcn,把figure的句柄作为输出函数输出。GUI界面便在屏幕上显示出来。
5、此后程序处于等待状态,等待用户的操作。程序在调用gui_mainfcn函数时,会给figure以及各控件加一个事件监听器(listener),用来监听用户对figure以及各控件的操作。例如:用户用鼠标点击一个pushbutton按钮时,程序会监听到这个时间,然后调用该按钮的回调函数pushbutton_callback,对事件进行处理。用户点击figure的关闭按钮时,会调用其CloseRequestFcn回调函数,执行关闭窗口的操作等等。
程序在主函数里调用figure及格控件的CreateFcn函数创建完各控件后,下一步的任务就是要显示figure以及各控件。这时程序会调用其OpeningFcn函数,用户如果想初始化各控件的数值以及和figure相关联的handle结构的数值,代码就可以放在这里。注意:要调用guidata(hObject,handles);函数保存所做的修改。
在OpeningFcn函数中有一条代码:handles.output=hObject;是matlab gui自动加上的,目的是把该GUI Figure的
句柄当作输出函数传递出去。handles.output是matlab guide自动添加到handles结构中的变量,用来传递输出参数,我们可以修改这个变量名,如:用handles.myoutput代替,只是要和OutputFcn中的varargout{1}=handles.output;名字相对应就可以。
如果我们再OpengingFcn的最后没有调用uiwait(handles.figure1),则程序立马调用OutputFcn,并返回i,这时程序的输出参数就是figure的句柄,我们可以利用这个句柄来 操纵figure内的控件。例如,设置其数值等。如果我们再OpeningFcn的最后调用了uiwait(handles.figure1),则程序不会调用
OutputFcn, 而是等到用户完成操作,调用uiresume(handles.figure1)时才继续调用OutputFcn函数。
直到这时,程序才算执行完毕。接下来,程序会利用原先设定的监听器来监听用户的输入操作。如,按下pushbutton等。
用guide创建的GUI的整个工作过程就是这样。了解了其工作流程,我们可以在编程中灵活控制,而不用感到一头雾水了。
http://blog.csdn.net/zhaisharap/article/details/16856769
相关文章推荐
- matlab 使用GUI的一些入门细节
- MatLab GUI Use Command for Debug 界面调试的一些方法
- MATLAB GUI设计中的一些常用函数
- 关于matlab GUI 的一些总结
- MATLAB GUI 的一些小技巧(参数传递、结果显示、图像清除)
- 关于MATLAB的GUI一些实用小技巧
- 转载:关于Matlab GUI的一些经验总结
- MATLAB中全局变量的认识——GUI
- Matlab GUI工具栏编辑器
- Matlab GUI界面
- matlab一些画图技巧(无整理)
- 关于OGRE四元数和旋转的一些浅显认识`
- matlab中GUI界面点击图片获取坐标问题的解决方法
- 谈谈我对众筹的一些认识
- 关于Spring之AOP的一些认识
- 对8086的总线的一些认识
- 关于一些对location认识的误区
- 【转】Matlab GUI 鼠标事件
- (每日心得)关于C#中委托与事件的一些认识(一)
- 谈谈对C#中反射的一些理解和认识(上)