Во-первых, я хотел бы спросить себя, хочет ли пользователь скрытое наведение, которое нельзя отключить? Итак, первый вариант, который я хотел бы предложить, это добавить tooltips
не к каждому средству визуализации, а к figure
, который создает один значок HoverTool
, который применяется ко всем линиям на графике, например: (Bokeh v1.3.0)
from bokeh.plotting import figure, show
from bokeh.models import HoverTool, Column, Button, CustomJS
import numpy as np
p = figure(toolbar_location='above',
tooltips=[("x", "@x")]
)
lines = [p.line(np.arange(10), np.random.random(10)) for i in range(3)]
for i in range(len(lines)):
p.add_tools(HoverTool(tooltips=[("x", "@x")], renderers=[lines[i]]))
# button = Button(label='Hide Hover Icon')
# code = ''' hover_btns = document.getElementsByClassName('bk-tool-icon-hover')
# for(i=0; i<hover_btns.length; i++)
# hover_btns[i].style.display = 'none' '''
#
# button.callback = CustomJS(code=code)
show(Column(p,
# button,
))
Тогда, если вы действительно не хотите видеть значок наведения на панели инструментов, вы можете добавить обратный вызов JS, выполняемый по нажатию кнопки, который скрывает все значки наведения, например:
from bokeh.plotting import figure, show
from bokeh.models import HoverTool, Column, Button, CustomJS
import numpy as np
p = figure(toolbar_location='above',
# tooltips=[("x", "@x")]
)
lines = [p.line(np.arange(10), np.random.random(10)) for i in range(3)]
for i in range(len(lines)):
p.add_tools(HoverTool(tooltips=[("x", "@x")], renderers=[lines[i]]))
button = Button(label='Hide Hover Icon')
code = ''' hover_btns = document.getElementsByClassName('bk-tool-icon-hover')
for(i=0; i<hover_btns.length; i++)
hover_btns[i].style.display = 'none' '''
button.callback = CustomJS(code=code)
show(Column(p,
button,
))
Но для этого требуется, чтобы пользователь сначала нажал кнопку, поэтому, возможно, более элегантный способ сделать это - вызвать код JS, уже загруженный на страницу, используя подходописано здесь .