修改matplotlib TextBox值而不触发回调

时间:2019-05-16 01:53:03

标签: python matplotlib

例如,我有一个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

有没有一种首选的方法?

1 个答案:

答案 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提出拉取请求没关系,我看到您已经提出了问题。