Source code for shyft.dashboard.examples.multi_select_tabs

from typing import Optional, Dict, Any

from bokeh.layouts import row
from bokeh import __version__ as bokeh_version
if bokeh_version < '3.0.0':
    from bokeh.models import (Panel,Tabs)
else:
    from bokeh.models import (TabPanel as Panel,Tabs)

from shyft.dashboard.widgets.logger_box import LoggerBox
from shyft.dashboard.widgets.selector_models import LabelDataSelector
from shyft.dashboard.base.selector_presenter import SelectorPresenter
from shyft.dashboard.base.selector_views import MultiSelect
from shyft.dashboard.base.app import AppBase


[docs] class MultiSelectTabsExample(AppBase):
[docs] def __init__(self, thread_pool, app_kwargs: Optional[Dict[str, Any]]=None): super().__init__(thread_pool=thread_pool)
@property def name(self) -> str: """ This property returns the name of the app """ return "multi_select_tabs_example"
[docs] def get_layout(self, doc: "bokeh.document.Document", logger: Optional[LoggerBox]=None) -> "bokeh.layouts.LayoutDOM": """ This function returns the full page layout for the app """ doc.title = self.name labels_tab_A = ['Bardufoss', 'Innsetvatn', 'Vinje', 'Suldalsvatn'] labels_tab_B = ['Akersvatn','Botnane', 'Ringedalsvatn'] # MultiSelectors presented as Tabs label_view_A = MultiSelect(title='Series A', width=250, size=7, logger=logger) label_presenter_A = SelectorPresenter(name='Presenter A', view=label_view_A, logger=logger) label_selector_A = LabelDataSelector(presenter=label_presenter_A, logger=logger) label_view_B = MultiSelect(title='Series B', width=250, size=7, logger=logger) label_presenter_B = SelectorPresenter(name='Presenter B', view=label_view_B, logger=logger) label_selector_B = LabelDataSelector(presenter=label_presenter_B, logger=logger) tab_A = Panel(child=row(label_view_A.layout), title='Tab A') tab_B = Panel(child=row(label_view_B.layout), title='Tab B') tabs = Tabs(tabs=[tab_A, tab_B], width=300) label_selector_A.receive_labels(labels_tab_A) label_selector_B.receive_labels(labels_tab_B) return tabs