调试bokeh的提示

时间:2019-05-17 07:00:32

标签: bokeh

我的应用程序已经变得相当复杂,几个文件之间大约有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

1 个答案:

答案 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()