Python Bokeh标记文本值无法更新

时间:2019-12-05 14:00:58

标签: python bokeh

我正在构建Bokeh服务器来承载SQL查询功能,因此我想在网页上打印查询状态,因此我使用了Markup小部件并更新了它的文本值。但是,“正在运行查询,请稍候...”的信息永远不会显示,完成函数执行后只能显示最后一个值。

如何找到问题所在?

下面是我的代码的一部分:

def submit_query():
    para_status.text = "Running query, please wait..."
    cnx = mysql.connector.connect(**SQL_config)
    query = clause_build()  #call the query clause from another def
    df = pd.read_sql(query, cnx)
    cnx.close()
    if df.size >0:
        para_status.text = ("Data query is done, total " + \
        str(int(df.shape[0])) + " rows.")
        df.to_csv(dpath + './query_result.csv', index = False)
    else:
        para_status.text = "Oops, result is empty, please refine the filters and try again."

para_status = PreText(text = '')

btn_submit = Button(label = "Submit query", button_type="success")
btn_submit.on_click(submit_query)

page = column(btn_submit, para_status)

1 个答案:

答案 0 :(得分:1)

散景状态仅在回调结束时与浏览器同步。如果要进行一些更新,然后进行大量阻塞性工作,然后进行另一项更新,则需要进行拆分,以便第一个回调立即完成,然后安排其余工作在返回之后进行。最简单的方法是使用from time import sleep from bokeh.io import curdoc from bokeh.layouts import column from bokeh.models import Button, Div d = Div(text="start") b = Button() def work(): sleep(2) d.text = "end" def cb(): d.text = "middle" curdoc().add_next_tick_callback(work) b.on_click(cb) curdoc().add_root(column(d, b))

Sub x()

Dim r As Range, n As Long

With Worksheets("DataSource")
    Set r = .Range("E" & .Rows.Count).End(xlUp) 'find the last cell in column E
    n = .Range("A" & Rows.Count).End(xlUp).Row   'find row number of last cell in A
    r.AutoFill Range(r, .Cells(n, "A"))          'autofill in E from last cell to last row as per A
End With

End Sub