图形用户界面中的Matlab缩放侦听器
我有一个图形用户界面,它在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
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