Matlab Guide, излучать событие (или сигнал) при увеличении - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть графический интерфейс в Matlab, созданный с помощью guide.Внутри этого графического интерфейса axes.Я хочу подать сигнал, как только кто-то меняет масштаб этого сюжета.

Почему:

Мне нужно изменить XTickLabels.При увеличении изменяется XTick и мне нужно обновить XTickLabels.Невозможно жестко закодировать значения XTick (потому что вы сможете увеличить масштаб и получить более подходящие значения XTick).

В C ++ с Qt я просто испускаю сигнал, как только изменяется какой-либо коэффициент масштабирования, и подключаю его к слоту, который меняет XTickLables.Я не уверен, как это сделать с MATLAB.

1 Ответ

0 голосов
/ 19 декабря 2018

Ссылка в моем комментарии объясняет, как прикрепить listener к любому ( Observable ) изменению свойства, но если вас интересуют только события, вызванные действием масштабирования,Вы можете получать события, инициируемые непосредственно объектом zoom.

Ниже приведена небольшая демонстрация того, как прикрепить обработчики событий к объекту масштабирования:

function demozoomevent
% Listen to zoom events

    % Sample figure and plot
    plot(1:10);
    % retrieve the zoom object handle
    h = zoom;
    % set the callback for 'before' and 'after' zoom event
    h.ActionPreCallback = @myprecallback;
    h.ActionPostCallback = @mypostcallback;
    % Activate the zoom
    h.Enable = 'on';


function myprecallback(obj,evd)
% will be executed BEFORE the zooming happens
    disp('A zoom is about to occur.');

function mypostcallback(obj,evd)
% will be executed AFTER the zooming happended
    newLim = evd.Axes.XLim;
    msgbox(sprintf('The new X-Limits are [%.2f %.2f].',newLim));

примечание : этот способ не прослушивает изменения XLim или связанных XTickLabel, а только события масштабирования.Если вы хотите использовать этот метод, рассмотрите возможность сделать то же самое с объектом pan, так как он также может быть использован для изменения XLim ваших осей.

...