Этот вопрос касается размещения виджетов управления над виджетом вкладок в Bokeh.
У меня есть рабочий код, который создает макет вкладок, где на каждом листе вкладок имеется элемент управления, установленный над графиком:
def make_plots(self):
p1 = self.make_plot(...
p2 = self.make_plot(...
p3 = self.make_plot(...
p4 = self.make_plot(...
c1 = MakeControls(self)
c2 = MakeControls(self)
c3 = MakeControls(self)
c4 = MakeControls(self)
# put these in a tuple so they can be synchronized whenever one changes
self.plot_set = (p1, p2, p3, p4)
self.control_set = (c1, c2, c3, c4)
p1_ = Column(c1.controls, p1)
p2_ = Column(c2.controls, p2)
p3_ = Column(c3.controls, p3)
p4_ = Column(c4.controls, p4)
tab1 = Panel(child = p1_, title = self.type_labels[1])
tab2 = Panel(child = p2_, title = self.type_labels[2])
tab3 = Panel(child = p3_, title = self.type_labels[3])
tab4 = Panel(child = p4_, title = self.type_labels[4])
tabs = Tabs(tabs=[tab1,tab2,tab3,tab4])
return tabs
И объект tabs успешно добавлен в корень документа. Все отлично работает.
Я получил предложение о том, что, поскольку все мои элементы управления идентичны и я их синхронизирую, я должен просто использовать один набор элементов управления и поместить их над вкладками.
Итак, я попробовал это:
def make_plots(self):
p1 = self.make_plot(...
p2 = self.make_plot(...
p3 = self.make_plot(...
p4 = self.make_plot(...
c1 = MakeControls(self)
tab1 = Panel(child=p1, title=self.type_labels[1])
tab2 = Panel(child=p2, title=self.type_labels[2])
tab3 = Panel(child=p3, title=self.type_labels[3])
tab4 = Panel(child=p4, title=self.type_labels[4])
tabs = Tabs(tabs=[tab1, tab2, tab3, tab4])
p = Column(c1,tabs)
return p
Я получаю сообщение об ошибке, используя Column таким образом. Это сработало, когда я сложил один набор элементов управления над одним рисунком графика, но не сработало, когда я попытался сложить один набор элементов управления над набором вкладок.
Единственное сообщение, которое я вижу, которое могло бы иметь смысл, это следующее:
ValueError: ожидал элемент List (Instance (LayoutDOM)), получил seq с недопустимыми элементами
Как правильно это сделать?