Full working example, which requires current master or Panel >=0.10.0a18 (to be released tomorrow), to work:
import panel as pn
import param
from tornado.ioloop import IOLoop
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
import numpy as np
class Application(param.Parameterized):
do_calc = param.Action(lambda self: self._do_calc())
def __init__(self, **params):
super(Application, self).__init__(**params)
self.source = ColumnDataSource({"x": range(10), "y": range(10)})
self.figure = figure()
self.figure.line(x="x", y="y", source=self.source)
self.col = pn.Column(
pn.pane.Markdown("## Title"),
self.param.do_calc,
self.figure,
)
pn.state.add_periodic_callback(self._do_calc, 200) # <- this line does not work properly
def _do_calc(self):
data = list(np.random.randint(0, 2 ** 31, 10))
self.source.data.update({"y": data})
def panel(self):
return self.col
def create_app():
app = Application()
return app.panel()
loop = IOLoop().current()
server = pn.serve(create_app, show=False, loop=loop, start=False, port=5006)
# Do stuff
server.io_loop.start()