2017-12-14 1 views
1

Ich möchte Filter dynamisch in Bokeh hinzufügen, d. H. Jedes Mal, wenn eine Taste gedrückt wird, wird ein neuer Filter angehängt. Das Layout wird jedoch unterbrochen, nachdem neue Widgets hinzugefügt wurden: Neue werden über alte geschrieben, anstatt dass das Layout neu berechnet wird. CodebeispielHinzufügen von Widgets dynamisch in Bokeh

from bokeh.layouts import row, column 
from bokeh.models.widgets import Button, Select 
from bokeh.io import curdoc 

def add_select(): 
    feature = Select(value='feat', options=["a"]) 
    dynamic_col.children.append(feature) 

b1 = Button(label="Add condition", button_type="success") 
b1.on_click(add_select) 

b2 = Button(label="Apply", button_type="success") 

dynamic_col = column() 
curdoc().add_root(column(b1, dynamic_col, b2)) 

-Layout, bevor Sie auf "Hinzufügen"

Layout before clicking "Add" button

-Layout nach Select-Widget

Layout after Select widget gets added

Antwort

0

Warum Sie nicht über eine einzige Liste verwenden hinzugefügt wird, um mit all deinen Widgets umgehen?

from bokeh.layouts import column 
from bokeh.models.widgets import Button, Select 
from bokeh.io import curdoc 

def add_select(): 
    feature = Select(value='feat', options=["a"]) 
    dynamic_col.children.insert(-1, feature) 

b1 = Button(label="Add condition", button_type="success") 
b1.on_click(add_select) 

b2 = Button(label="Apply", button_type="success") 

dynamic_col = column(b1, b2) 
curdoc().add_root(dynamic_col) 

ich statt „anhängen“, um das Widget „Einfügen“ den zweiten Knopf am Ende der Liste zu lassen

Ich habe dieses Ergebnis:

result