Используйте инструменты «Увеличить» / «Уменьшить» для обновления полей в дизайнере приложений. - PullRequest
1 голос
/ 07 января 2020

Попытка найти способ использовать инструменты увеличения / уменьшения масштаба на фигуре для автоматического обновления полей в моем приложении.

Моя главная проблема в том, что мне нужно событие, которое запускает поля, которые нужно обновить. Я мог бы использовать кнопку, чтобы вывести новые границы осей, но я чувствую, что должен быть способ обойти это. Кто-нибудь знает, как я могу обнаружить изменение оси фигуры, не вытягивая вручную обновленную ось фигуры?

Ответы [ 3 ]

1 голос
/ 07 января 2020

Спасибо 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 имел функции до и после обратного вызова.

1 голос
/ 07 января 2020

Я вижу, что вы добавили свой собственный ответ - но есть еще один способ сделать это, добавив слушателей к свойствам осей 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' ) )
0 голосов
/ 07 января 2020

Используете ли вы оси из App Designer? Если да, то у топоров еще нет событий, насколько я знаю. В будущем он может измениться.

На данный момент вы можете использовать объект бывших осей, он имеет гораздо больше настроек и позволит вам также устанавливать События. Проверьте документацию MATLAB для получения дополнительной информации. https://www.mathworks.com/help/matlab/ref/zoom.html#brux2aq

Вот пример, показывающий, как использовать старый объект осей. В вашей функции запуска вы можете добавить объект, как показано ниже. Обратите внимание, что вы должны установить родительский параметр, иначе он создаст другую фигуру (не uifigure).

axes('Parent', app.UIFigure)
...