使用图'Zoom in'/'Zoom out'工具更新appdesigner中的字段
Use figure 'Zoom in'/ 'Zoom out' tools to update fields in appdesigner
试图找到一种方法来使用图形上的缩放 in/out 工具来自动更新我的应用程序中的字段。
我的主要问题是我需要一个触发字段更新的事件。我可以使用一个按钮来拉动新的轴限制,但我觉得应该有办法解决这个问题。有人知道如何在不手动拉动更新图形轴的情况下检测图形轴的变化吗?
您使用的是 App 设计工具中的轴吗?如果是这样,据我所知,轴还没有事件。以后可能会变。
现在,您可以使用以前的轴对象,它有更多的设置,并且还允许您设置事件。查看 MATLAB 文档以获取更多信息。
https://www.mathworks.com/help/matlab/ref/zoom.html#brux2aq
这是一个展示如何使用旧轴对象的示例。
在您的启动函数中,您可以添加如下所示的对象。请注意,您必须设置 Parent 设置,否则它将创建另一个图形(不是 uifigure)。
axes('Parent', app.UIFigure)
感谢 Oro777 为我指明了正确的方向。这是我想出的解决方案。
创建我想要应用此功能的图形后,我添加
z = zoom;
z.ActionPostCallback = {@ZoomPostCallback,app};
z.Enable = 'on';
ZoomPostCallback 是
function ZoomPostCallback(~,evd,app)
%Pull new x axes limits and apply them to app edit fields
xLim = evd.Axes.XLim;
app.TimeMinsEditField.Value = round(xLim(1),2);
app.TimeMaxsEditField.Value = round(xLim(2),2);
%Pull new y axes limits and apply them to app edit fields
yLim = evd.Axes.YLim;
app.FreqMinHzEditField.Value = round(yLim(1));
app.FreqMaxHzEditField.Value = round(yLim(2));
%Run changesAxes to ensure all other fields are updated
changeAxes(app)
end
效果很好。希望这可以帮助其他人。这一切都基于 zoom 具有 pre 和 post 回调功能这一事实。
我看到您已经添加了自己的答案 - 但这是另一种方法,通过向轴的 xlim 和 ylim 属性添加侦听器:
hFig = figure;
ax = axes ( 'Parent', hFig );
% add the listeners - this will just display at the command line, but
% hopefully you get the idea.
addlistener ( ax, 'XLim', 'PostSet', @(h,ev)disp ( 'xlim changed' ) )
addlistener ( ax, 'YLim', 'PostSet', @(h,ev)disp ( 'ylim changed' ) )
试图找到一种方法来使用图形上的缩放 in/out 工具来自动更新我的应用程序中的字段。
我的主要问题是我需要一个触发字段更新的事件。我可以使用一个按钮来拉动新的轴限制,但我觉得应该有办法解决这个问题。有人知道如何在不手动拉动更新图形轴的情况下检测图形轴的变化吗?
您使用的是 App 设计工具中的轴吗?如果是这样,据我所知,轴还没有事件。以后可能会变。
现在,您可以使用以前的轴对象,它有更多的设置,并且还允许您设置事件。查看 MATLAB 文档以获取更多信息。 https://www.mathworks.com/help/matlab/ref/zoom.html#brux2aq
这是一个展示如何使用旧轴对象的示例。 在您的启动函数中,您可以添加如下所示的对象。请注意,您必须设置 Parent 设置,否则它将创建另一个图形(不是 uifigure)。
axes('Parent', app.UIFigure)
感谢 Oro777 为我指明了正确的方向。这是我想出的解决方案。 创建我想要应用此功能的图形后,我添加
z = zoom;
z.ActionPostCallback = {@ZoomPostCallback,app};
z.Enable = 'on';
ZoomPostCallback 是
function ZoomPostCallback(~,evd,app)
%Pull new x axes limits and apply them to app edit fields
xLim = evd.Axes.XLim;
app.TimeMinsEditField.Value = round(xLim(1),2);
app.TimeMaxsEditField.Value = round(xLim(2),2);
%Pull new y axes limits and apply them to app edit fields
yLim = evd.Axes.YLim;
app.FreqMinHzEditField.Value = round(yLim(1));
app.FreqMaxHzEditField.Value = round(yLim(2));
%Run changesAxes to ensure all other fields are updated
changeAxes(app)
end
效果很好。希望这可以帮助其他人。这一切都基于 zoom 具有 pre 和 post 回调功能这一事实。
我看到您已经添加了自己的答案 - 但这是另一种方法,通过向轴的 xlim 和 ylim 属性添加侦听器:
hFig = figure;
ax = axes ( 'Parent', hFig );
% add the listeners - this will just display at the command line, but
% hopefully you get the idea.
addlistener ( ax, 'XLim', 'PostSet', @(h,ev)disp ( 'xlim changed' ) )
addlistener ( ax, 'YLim', 'PostSet', @(h,ev)disp ( 'ylim changed' ) )