For example, I have a Slider with a callback set via on_changed(). I have the option of modifying the Slider value with set_val() without triggering the callback by setting eventson to False before setting the value.
However, if I set eventson to False for the TextBox, then update the value with set_val(), the callback on_submit() still gets triggered.
The source code for my version of Matplotlib verifies this:
For TextBox:
def set_val(self, val):
newval = str(val)
if self.text == newval:
return
self.text = newval
self.text_disp.remove()
self.text_disp = self._make_text_disp(self.text)
self._rendercursor()
self._notify_change_observers()
self._notify_submit_observers()
For Slider:
def set_val(self, val):
"""
Set slider value to *val*
Parameters
----------
val : float
"""
xy = self.poly.xy
xy[2] = val, 1
xy[3] = val, 0
self.poly.xy = xy
self.valtext.set_text(self.valfmt % val)
if self.drawon:
self.ax.figure.canvas.draw_idle()
self.val = val
if not self.eventson:
return
for cid, func in self.observers.items():
func(val)
Is there a preferred way to do this?