2015-03-02 21 views
1

我正在使用散景服務器處理通過tcp傳輸的數據,以便使用output_server顯示給瀏覽器。我希望能夠動態地將更多的圖添加到當前的瀏覽器頁面,因爲數據通過套接字來傳遞。我的一部分麻煩是我不完全理解cursession()和curdoc()如何工作/它們是如何不同的。散景0.7.1:動態添加繪圖到散景服務器生成的現有頁面

我當前的代碼如下所示:

plots = [] 

if create_new_plot: 
     plots.append(create_new_plot_def()) 
if open_new_tab: 
     show(plots) 
     open_new_tab = False 
else: 
     curdoc().add(plots) 

當我運行它,我得到的名單'對象沒有屬性的錯誤「的引用。」爲了解決這個問題,我似乎必須循環並逐個添加每個繪圖,但這也不起作用。 plots[]包含我想在當前顯示的所有繪圖對象的運行列表。我發現的一個解決方法是每次只使用show(),但每次都會在瀏覽器中打開一個新選項卡,這不實用/優雅。

傳統上,我使用cursession()。add_object()更新我的圖上的數據源。在我看來,cursession()處理所有數據後端,而curdoc()控制頁面上的實際可視化。它是否正確?

有沒有一種方法可以讓我在相同的現有瀏覽器頁面(即文檔)上觸發顯示全新的情節?有人可以簡單地解釋一下,如何正確使用cursession()和curdoc()?謝謝!


編輯: 我已經找到了解決,但仍然存在多重不能得到show()電話,導致多個瀏覽器窗口中打開。我的代碼現在看起來像這樣:

if open_tab: 
    show(grid_plot) 
    open_tab = False 
else: 
    curdoc().clear() 
    curdoc().add(grid_plot) 
    show() 

回答

1

我找到了一個解決方案,使用push(),也在io.py中。新代碼段,工程:

if open_tab: 
    show(grid_plot) 
    open_tab = False 
else: 
    curdoc().clear() 
    curdoc().add(grid_plot) 
    push() 

在這樣做時,HTML頁面被刷新,而不是生成的第二個重複頁面(新標籤)。

看看這個:https://groups.google.com/a/continuum.io/d/msg/bokeh/rMDt1sT5Cwk/fkKfS8yeTO8J關於curdoc()vs cursession()的解釋。注意即將發佈的文檔。