В MATLAB, как вы можете выполнить обратный вызов во время перетаскивания слайдера? - PullRequest
10 голосов
/ 17 мая 2011

Я создал графический интерфейс MATLAB, используя GUIDE. У меня есть слайдер с функцией обратного вызова. Я заметил, что этот обратный вызов, который должен выполняться «при перемещении ползунка», фактически выполняется только после перемещения ползунка и отпускания мыши.

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

Ответы [ 3 ]

16 голосов
/ 17 мая 2011

Даже если обратный вызов ползунка не вызывается при перемещении мыши, свойство 'Value' ползунка uicontrol обновляется . Следовательно, вы можете создать прослушиватель, используя addlistener, который будет выполнять данный обратный вызов при изменении свойства 'Value'. Вот пример:

hSlider = uicontrol('Style', 'slider', 'Callback', @(s, e) disp('hello'));
hListener = addlistener(hSlider, 'Value', 'PostSet', @(s, e) disp('hi'));

При перемещении ползунка вы увидите, как на экран выводится 'hi' (обратный вызов слушателя), а когда вы отпустите кнопку мыши, вы увидите напечатанный 'hello' (обратный вызов uicontrol).

4 голосов
/ 16 июня 2011

Просто для сведения, этот предмет подробно обсуждается здесь: http://UndocumentedMatlab.com/blog/continuous-slider-callback/ - там представлено несколько альтернативных решений. Решение gnovice, использующее addlistener, эквивалентно handle.listener alternative, так как addlistener является просто оболочкой для последнего.

0 голосов
/ 15 октября 2014

Если вы хотите выполнить тот же оригинальный обратный вызов, который вы передали uicontrol, вы можете добавить этот универсальный слушатель, который загружает существующий обратный вызов:

sld.addlistener('Value','PostSet',@(src,data) data.AffectedObject.Callback(data.AffectedObject,struct('Source',data.AffectedObject,'EventName','Action')));

Похожие записи в блоге

...