Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
图形用户界面中的Matlab缩放侦听器_Matlab_Plot_Zooming - Fatal编程技术网

图形用户界面中的Matlab缩放侦听器

图形用户界面中的Matlab缩放侦听器,matlab,plot,zooming,Matlab,Plot,Zooming,我有一个图形用户界面,它在MATLAB中由一个绘图和一个静态文本组成 我想在绘图上有一个缩放侦听器,这样我就可以用放大率更新静态文本。是否有其他方法可以执行此操作?脚本文件(或者可以作为嵌套函数执行此操作,无论您喜欢什么): 函数testcallback.m文件: function testcallback(obj,event_obj,t) xlim = get(event_obj.Axes,'XLim'); set(t,'fontsize',4000/(xlim(2)-xlim

我有一个图形用户界面,它在MATLAB中由一个绘图和一个静态文本组成

我想在绘图上有一个缩放侦听器,这样我就可以用放大率更新静态文本。是否有其他方法可以执行此操作?

脚本文件(或者可以作为嵌套函数执行此操作,无论您喜欢什么):

函数
testcallback.m
文件:

function testcallback(obj,event_obj,t)
    xlim = get(event_obj.Axes,'XLim');
    set(t,'fontsize',4000/(xlim(2)-xlim(1)));
end
输出:

此外,如果您想直接更改缩放功能的工作方式或处理其他一些事情,这里有关于
zoom
对象的matlab文档:

编辑: 最后,您可以将其实现为一个嵌套函数来传递文本对象。将其保存为
testfunction.m
,然后在终端中通过键入
testfunction
运行它:

function testfunction

    f = figure(1);
    z = zoom(f);
    imshow(ones(400));
    xlim = get(gca,'XLim');
    t = text(150,150,'hello','fontsize',4000/(xlim(2)-xlim(1)));
    set(z,'ActionPostCallback',@testcallback);

    function testcallback(obj,event_obj)
        xlim = get(event_obj.Axes,'XLim');
        set(t,'fontsize',4000/(xlim(2)-xlim(1)));
    end

end

我是否可以传入句柄以便访问静态文本?我修改了它。您可能需要对其进行测试和调整,但这是一种方法。此外,如果您想通过
addlistener
执行此操作,我认为您必须找出轴中正在更改的值,然后在该值更改时添加一个回调(或者沿着这些线添加)。我认为这样做一个简单的回调比较容易。另一件事是,如果你把它实现为一个嵌套函数,那么你可以直接访问文本对象。我再次更新了它以显示我的意思。@ClaireHarrison我的理解是,每当你这样设置回调函数时,它都会像自动参数一样接收
(obj,event_obj)
,也就是说,这些参数通过Matlab自动发送给回调函数。这些参数用于获取对象所称的回调和其他内容。基本上,您可以附加一个已经位于工作区中的参数。在本例中,
t
是一个已经存在的文本对象,因此执行上述操作会将它发送到回调的参数附加在它后面。这种解释有点糟糕,但只是为了看看它是如何工作的。尝试编写一个函数,比如
functiontest=(a,b,c)
,然后通过执行
test\u handle=@(a,b)test(a,b,3)
来制作一个函数句柄;然后通过
测试句柄(1,2)
调用函数。如果调试函数文件,您会发现
(1,2,3)
已作为参数传递。您可以使用
test\u handle(5,6)
再试一次,您会发现
(5,6,3)
是参数,等等。。。
function testfunction

    f = figure(1);
    z = zoom(f);
    imshow(ones(400));
    xlim = get(gca,'XLim');
    t = text(150,150,'hello','fontsize',4000/(xlim(2)-xlim(1)));
    set(z,'ActionPostCallback',@testcallback);

    function testcallback(obj,event_obj)
        xlim = get(event_obj.Axes,'XLim');
        set(t,'fontsize',4000/(xlim(2)-xlim(1)));
    end

end