我的应用程序已经变得相当复杂,几个文件之间大约有1500行。有一个按钮可创建选项卡并将其添加到现有面板。这是一个有关按钮如何工作的最小示例:
def create_new_tab():
paragraph = Paragraph(text="Hello!")
tab = Panel(child=paragraph, title="tab")
tab.closable = True
return tab
def append_new_tab():
new_tab = create_new_tab()
curdoc().select_one({'name': 'tabs'}).tabs.append(new_tab)
button = Button(label='append new tab')
button.on_click(append_new_tab)
tab1 = Panel(child=button, title='button tab')
tabs = Tabs(tabs = [tab1], name='tabs')
curdoc().add_root(tabs)
在我的实际程序中的某个地方有一个错误,因为当我单击按钮时,我得到消息说在迭代过程中某些设置已更改:
错误处理消息消息'EVENT'(修订1)内容:'{“ event_name”:“ button_click”,“ event_values”:{“ model_id”:“ 1002”}}}':RuntimeError('设置迭代期间更改的大小',)
我花了一些时间尝试调试,但没有成功。我试图创建一个最小的不起作用示例,但是我所有的最小示例都起作用。我一直盯着错误消息,不知道该怎么办才能找出问题所在?
备注:我已经在使用bokeh serve myapp/ --dev
答案 0 :(得分:1)
您可以使用以下代码(Bokehh v1.1.0)调试您的应用:
from bokeh.models import Panel, Tabs, Button, Paragraph
from tornado.ioloop import IOLoop
from bokeh.server.server import Server
from bokeh.application import Application
from bokeh.application.handlers.function import FunctionHandler
def modify_doc(doc):
def create_new_tab():
paragraph = Paragraph(text="Hello!")
tab = Panel(child=paragraph, title="tab")
tab.closable = True
return tab
def append_new_tab():
new_tab = create_new_tab()
doc.select_one({'name': 'tabs'}).tabs.append(new_tab)
button = Button(label='append new tab')
button.on_click(append_new_tab)
tab1 = Panel(child=button, title='button tab')
tabs = Tabs(tabs = [tab1], name='tabs')
doc.add_root(tabs)
io_loop = IOLoop.current()
server = Server(applications = {'/app': Application(FunctionHandler(modify_doc))}, io_loop = io_loop, port = 5001)
server.start()
server.show('/app')
io_loop.start()