例如,我有一个Slider
,并通过on_changed()
设置了回调。我可以选择使用Slider
修改set_val()
的值,而无需在设置值之前将eventson
设置为False
来触发回调。
但是,如果我将eventson
的{{1}}设置为False
,然后用TextBox
更新值,则仍会触发回调set_val()
。 / p>
我的Matplotlib版本的源代码对此进行了验证:
对于on_submit()
:
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
有没有一种首选的方法?
答案 0 :(得分:0)
这是一个肮脏的解决方案,但是您可以"monkey patch"类TextBox来调用您自己的set_val()。不幸的是,我不知道这是否会带来意想不到的后果。
from matplotlib.widgets import 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()
if self.eventson:
self._notify_change_observers()
self._notify_submit_observers()
TextBox.set_val = set_val
(...)
tbox1 = TextBox(tax1, 'Text Box 1')
tbox1.on_submit(...)
tbox1.eventson = False
tbox1.set_val('test')
tbox1.eventson = True
plt.show()
或者,为寻求更好的长期解决方案,您可以提出问题,或在matplotlib's tracker提出拉取请求没关系,我看到您已经提出了问题。