Matlab GUI 基础(2):M文件

来源:互联网 发布:mysql添加字段 编辑:程序博客网 时间:2024/06/07 21:54

GUIDE生成的M文件,包含主函数,Opening函数、Output函数和各控件的回调函数。

一、M文件默认函数

1、主函数框架如下所示:

function varargout = text1(varargin)gui_Singleton = 1;gui_State = struct('gui_Name',       mfilename, ...                   'gui_Singleton',  gui_Singleton, ...                   'gui_OpeningFcn', @text1_OpeningFcn, ...                   'gui_OutputFcn',  @text1_OutputFcn, ...                   'gui_LayoutFcn',  [] , ...                   'gui_Callback',   []);if nargin && ischar(varargin{1})    gui_State.gui_Callback = str2func(varargin{1});endif nargout    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else    gui_mainfcn(gui_State, varargin{:});end

主函数主要是用于初始化操作,一般不要修改。
gui_Singleton = 1;表示只能生成一个 figure;
第一行是函数、输入输出参数表;
第四行、第五行是输入输出函数。

2、Opening 函数框架如下所示:

在 GUI 开始运行但还不可见的时候执行,主要进行一些初始化操作。
如果定义了 global 变量,亦可以在此处进行初始化。

function text1_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;guidata(hObject, handles);% uiwait(handles.figure1);

3、Output 函数框架如下所示:

可以输出数据到命令行。

function varargout = text1_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

4、执行顺序

GUI 文件执行函数的顺序是:

Opening>Output>

并且,Opening 函数 、 Output 函数只执行在开始运行时执行一次。
若要根据用户的要求,输出到命令行,可以使用暂停和就行函数:uiwait,uiresume
具体如下
(1)添加 uiwait 到 Opening 函数中(如上,uiwait(handles.figure1);)
(2)在期望相应的回调函数中,更新 handles.output 值,并执行 uiresume。

二、回调函数

回调函数的声明是:

function Tag_函数名(hObject, eventdata, handles)

如 push button 的 callback 回调函数为:

function pushbutton1_Callback(hObject, eventdata, handles)

hObject, 当前 figure 句柄
eventdata, 附加参数,一般用不到
handles,当前 GUI 句柄,包含所有 GUI 对象的信息

1、类型。

每个回调函数都有一个触发机制,导致其被调用。回调函数的类型包括:
Callback,控件被触发是执行
CreatFun,对象创建之后,显示之前执行
DeleteFun,删除对象时执行
KeyPressFun,按下按键时执行
KeyReleaseFun,松开按键时执行
ButtonDownFun,对象5像素区域内单击时执行

CellEditCallback,编辑表格单元格时执行
CellSelectinCallback,鼠标选中表格单元格时执行
ClickedCallback,toggle或push 单击时执行
OffCallback,toggle 为 on 时执行
OnCallback,toggle 为 off 时执行

CloseRequestFun,figure关闭时执行
ResizeFun,
SelectionChangeFun,

2、中断

Interruptible,
BusyActive,

当A执行时,B 试图中断它;若A的 Interruptible 为 on,B排队等候执行;当 A的 Interruptible 为 off时,若 BusyActive 为 cancel,则抛弃 B 操作,若 BusyActive 为 queue,则 B 排队等候执行。
(1)当前回调函数执行完,即 A 执行完,就执行 B;
(2)B 中含有:drawnow、figure、getframe、pause、waitfor 时,立即停止A,执行B

0 0