MATLAB GUI ,2,使用MATLAB的函数来实现MATLAB GUI,part 2,eval和回调函数

一  回调函数

    每个控件都有自己的回调函数,而回调函数都有不同的触发方式,通过回调函数,控件才能完成交互。后面的回调函数主要就两种形式,其中一种就是按钮按下时的回调函数了。

    set(button_handler, 'callback', 'function_name')

    就可以完成按钮的回调函数的设置。设置的函数名为function_name,那么当按钮按下时,相当于你在当前工作路径上执行了此函数,但是如果这个函数和GUI的函数在同一个.m文件内时,这样是无法完成调用,下面提供一种方式。

 

二  eval函数

    eval函数用来执行字符串形式的MATLAB语句,提供函数或者脚本的另一种实现方式,其调用方式为

    eval('command_string')

    例如,

    a = 10;

    plot(1:a);

    和

    a = 10;

    b = 'plot(1:a)';

    eva(b)

    完成的效果是一样的。

 

三  gca,gcf函数

    gca返回当前坐标轴的句柄,而gcf返回当前图像窗口的句柄,调用方式如下

    ah = gca;

    fh = gcf;

    在获取当前窗口和当前坐标轴的句柄后,就可以使用set和get函数来修改它们的属性了。

 

四    findobj函数

    完成查找对象,调用方式为

    objs = findobj('type',value1,'property',value2);  % 查找类型为value1的,属性property的值为value2的对象

    例如,

    fh = findobj('type','figure','name','part2demo'); % 查找名为part2demo的图像句柄

 

五  nargin和nargout函数

    函数nargin,返回函数的输入变量个数。对应的就有nargout,返回函数的输出个数。这里的输入输出的个数并非函数定义时的个数,而是函数在被调用时,传入的输入以及等待输出的个数。调用方式如下,

    n = nargin;

    n = nargout;

 

六  小结,用eval函数实现回调函数

    这一部分重点是eval函数,本文用eval函数的主要目的是实现回调函数,采用输入来作为是否为回调函数的标识。

    基本的实现方式是这样的:

    当存在输入时,采用eval来执行输入字符串,从而完成.m文件内部函数的调用,完成回调函数的功能。

    当不存在输入时,重新建立part2demo窗口,这里为了简便,建立窗口时,属性值与第一部分的相同,仅仅改变了图像句柄的'name'属性和按钮句柄的'callback'属性。

   

function part2(in) % 主函数
if nargin
    eval(in)         % 实现回调函数
else
    fhs = findobj('type','figure','name','part2demo');% 查找名为part2demo的图像句柄
    if ~isempty(fhs) % 判断是否存在part2demo窗口
        delete(fhs) % 若存在窗口则删除
    end
    fh = figure('name','part2demo',     ...  设置图像名
        'unit','pixel',                 ...  设置单位,与按钮一样,这里设置为像素,好调整位置
        'position',[240,70,800,600],    ...  假设电脑是1280X768的分辨率,那么我设置一个800X600的图像,尽量在屏幕中央
        'numbertitle','off',            ...  关闭figure的数字标题
        'resize','off',                 ...  不支持窗口大小的变换
        'menubar','none',               ...  取消默认菜单栏
        'toolbar','none'                ...  取消默认工具栏
        );
    ah = axes('units','normalized',     ...  设置单位,设置为归一化,
        'position',[0,0,1,1],           ...  铺满整个窗口
        'tickdir','out',                ...  设置坐标轴标记的方向为向外,这样在坐标轴上就不会看到了
        'xlim',[1,800],                 ...  设置x轴范围为1到800
        'ylim',[1,600]                  ...  设置y轴范围为1到600
        );
    ph = uicontrol(fh,                  ...  父句柄为刚刚建立的图像句柄
        'style','pushbutton',           ...  风格为按钮
        'string','绘制一个正弦波 - -',   ...  设置按钮文字
        'fontsize',40,                    ...  设置字体大小
        'units','normalized',           ...  设置单位为归一化
        'position',[0,0,1,0.2],         ...  设置按钮在窗口下方
        'callback','part2(''pushbutton_callback'')'   ...  设置按钮的回调函数,在坐标轴中绘制正弦波  ¥¥¥¥¥¥¥¥
        );
end

function pushbutton_callback % 回调函数
plot(200*sin(1:800)+350)
set(gca,                            ...  设置当前坐标轴的属性
    'tickdir','out',                ...  设置坐标轴标记的方向为向外,这样在坐标轴上就不会看到了
    'xlim',[1,800],                 ...  设置x轴范围为1到800
    'ylim',[1,600]                  ...  设置y轴范围为1到600
    );

 

    这里,内部函数的名字为 pushbutton_callback,所以在设置按钮的回调函数时,只需设置为 part2('pushbutton_callback') 即可。这样,在按钮按下时,会执行

    part2('pushbutton_callback')

    通过eval('pushbutton_callback')调用pushbutton_callback函数。截图和第一部分差不多,就不再贴了。

   

 

 

   

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值