Matlab GUI 基础(2):M文件

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});
end

if 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

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值