我正在使用GUIDE创建GUI,并在我的GUI中添加了一个滑块。之后,我在滑块上添加了一个监听器
myListener = addlistener(handles.mySlider,'Value','PostSet',@(src,evnt)myCallback(src,evnt, handles.figure1));
在函数myCallback
中,我对在轴上绘制的对象进行了一些更改。我还使这个对象可选,这样一旦用户点击对象就会调用另一个回调。我现在想用刚刚选中的对象初始化滑块,但不调用函数myCallback
。
也就是说,我需要像
这样的东西setWithoutCallingListener(handles.mySlider, ValueOfSelectedObject);
这可能吗?
答案 0 :(得分:2)
暂时停用侦听器的最简单方法是向句柄结构添加标志。
例如,在初始化例程开始时,设置handles.isInitializing=true; guidata(hObject,handles);
,并将if handles.isInitializing, return; end
添加到侦听器回调的开头。请记住在初始化例程结束时将标志设置为false
。
或者,不要使用侦听器,而是让所有UI元素回调调用函数updateUI(handles)
(除了潜在的输入检查;例如,您可能希望确保滑块只能采用在整数值上),它负责(1)调整所有相互依赖的值(例如,如果你有一个滑块和一个需要同步的编辑文本框),以及(2)产生你需要更新绘图的任何过程。这样做的好处是,如果通过函数修改元素,则不会触发UI元素回调。