Например, у меня есть Slider
с обратным вызовом, установленным через on_changed()
.У меня есть возможность изменить значение Slider
с помощью set_val()
без вызова обратного вызова, установив eventson
в False
перед установкой значения.
Однако, если я установлю eventson
в False
для TextBox
, затем обновите значение с помощью set_val()
, обратный вызов on_submit()
все еще срабатывает.
Исходный код моей версии Matplotlib проверяет это:
Для 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()
Для 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)
Есть ли предпочтительный способ сделать это?