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