Я борюсь с тем, что код внутри функции потока только один раз передается в IPython.Другими словами, display()
вызовы из DynamicMap выполняются только один раз (click = hv.DynamicMap(interactive_click, streams=[SingleTap()])
).
Это всего лишь простой пример, но в моем реальном случае использования у меня есть display(Javascript(''))
код, который мне нуженчтобы выполнить.
# problem: display statement not returned to Jupyter Notebook
import numpy as np
import holoviews as hv
from holoviews import opts
from holoviews.streams import SingleTap
# from IPython.display import Javascript
hv.extension('bokeh')
# triggered when clicking on a plot
def interactive_click(x, y):
# problem: Only executed once
display("init")
if None not in [x, y]:
# problem: never executed, because `display()` is not passed to Jupyter Notebook
display(x)
else:
x = 0
return hv.VLine(x).opts(color='green')
# random plot: http://holoviews.org/reference/elements/bokeh/Image.html
ls = np.linspace(0, 10, 200)
xx, yy = np.meshgrid(ls, ls)
bounds=(-1,-1,1,1) # Coordinate system: (left, bottom, right, top)
img = hv.Image(np.sin(xx)*np.cos(yy), bounds=bounds)
# do something when clicked on plot
click = hv.DynamicMap(interactive_click, streams=[SingleTap()])
# show plot and trigger code on-press
img * click
display("init")
отображается только один раз в выходной ячейке и display(x)
никогда (потому что первый вход (None, None)
).Это простой пример, но в моем случае я хочу выполнить Javascript, однако он может быть выполнен только в том случае, если вывод display()
передается ядру IPython.
Я знаю, что код выполняется,потому что зеленая линия на графике движется:
Вопрос
Кто-нибудь знает, как я могу display(x)
показать вывод вданный пример (означает, что вывод на экран передается ядру IPython в Jupyter Notebook)?