Frage

Ich habe eine Matlab-GUI mithilfe von Guide erstellt.Ich habe einen Schieberegler mit einer Callback-Funktion.Ich habe festgestellt, dass dieser Rückruf, der "auf der Slider-Bewegung" ausführen soll, in der Tat nur einmal läuft, wenn der Schieberegler verschoben wurde und die Maus freigegeben wurde.

Gibt es eine Möglichkeit, ein Skript zu erhalten, um zu laufen, da der Schieberegler gezogen wird, um eine Darstellung eines Grundstücks zu aktualisieren?Es würde vermuten, dass ich etwas brauchen, um das Skript zu stoppen, das zu oft ausgeführt wird.

War es hilfreich?

Lösung

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

Andere Tipps

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top