Domanda

Ho creato una GUI MATLAB usando la guida.Ho un cursore con una funzione di callback.Ho notato che questa richiamata, che dovrebbe eseguire "sul movimento del cursore", infatti funziona solo una volta che il cursore è stato spostato e il mouse è stato rilasciato.

C'è un modo per ottenere uno script da eseguire mentre il cursore viene trascinato, per l'aggiornamento dal vivo di una trama?Ci vorrei presumere di essere qualcosa per fermare la sceneggiatura che viene eseguita troppe volte.

È stato utile?

Soluzione

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).

Altri suggerimenti

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top