في MATLAB، كيف يمكنك تنفيذ رد اتصال أثناء جر شريط التمرير؟

StackOverflow https://stackoverflow.com/questions/6032924

سؤال

لقد أنشأت MATLAB GUI باستخدام الدليل.لدي شريط تمرير مع وظيفة رد الاتصال.لقد لاحظت أن هذا الاتصال، الذي من المفترض تنفيذ "على حركة شريط التمرير"، في الواقع يتم تشغيله بمجرد نقل شريط التمرير ويتم إصدار الماوس.

هل هناك طريقة للحصول على برنامج نصي لتشغيله حيث يتم سحب شريط التمرير، لتحديث مباشر للمؤامرة؟سيكون هناك حاجة إلى أن تكون هناك شيء لإيقاف البرنامج النصي قيد التشغيل عدة مرات.

هل كانت مفيدة؟

المحلول

Even though the callback of the slider isn't being called as the mouse is moved, the 'Value' property of the slider uicontrol is being updated. Therefore, you could create a listener using addlistener that will execute a given callback when the 'Value' property changes. Here's an example:

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

As you move the slider you should see 'hi' being printed to the screen (the listener callback), and when you release the mouse you will see 'hello' printed (the uicontrol callback).

نصائح أخرى

Just for the record, this subject is discussed in detail here: http://UndocumentedMatlab.com/blog/continuous-slider-callback/ - several alternative solutions are presented there. gnovice's solution using addlistener is equivalent to the handle.listener alternative, since addlistener is basically just a wrapper for the latter.

If you want to execute the same original callback you passed to uicontrol you can add this generic listener which bootstraps the existing callback:

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

Related blog post

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top