Source code for shyft.dashboard.examples.label_selector

from typing import Optional, Dict, Any

from bokeh.layouts import column

from shyft.dashboard.base.ports import connect_ports, Receiver
from shyft.dashboard.base.selector_presenter import SelectorPresenter
from shyft.dashboard.base.selector_views import MultiSelect
from shyft.dashboard.widgets.logger_box import LoggerBox
from shyft.dashboard.widgets.selector_models import LabelDataSelector, LabelData, LabelDataSelectorClickPolicy
from shyft.dashboard.base.app import AppBase


[docs] class LabelSelectorExample(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 "label_selector_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 = ["A", "B", "C", "D", "E", "F", "G", "H", "I"] label_view = MultiSelect(title='Available Labels', size=10, width=300, height=200, logger=logger) label_presenter = SelectorPresenter(name='Available Labels', view=label_view, logger=logger) label_selector = LabelDataSelector(presenter=label_presenter, on_click_policy=LabelDataSelectorClickPolicy.SEND_SELECTED, logger=logger) def _receive_selection_to_assert(selection: LabelData): print(f"\n You selected labels: `{selection}`\n") if logger: logger.info(f" You selected labels: `{selection}`") receive_selection_to_assert = Receiver(parent='parent', name='assert_selection', func=_receive_selection_to_assert, signal_type=LabelData) # connect our function to selector model connect_ports(label_selector.send_selected_labels, receive_selection_to_assert) label_view2 = MultiSelect(title='Available Labels', size=10, width=300, logger=logger) label_presenter2 = SelectorPresenter(name='Available Labels', view=label_view2, logger=logger) label_selector2 = LabelDataSelector(presenter=label_presenter2, on_click_policy=LabelDataSelectorClickPolicy.REMOVE_SELECTED_AND_SEND_REST, logger=logger) def _receive_selection_to_assert2(selection: LabelData): print(f"\n The remaining labels are: `{selection}`\n") if logger: logger.info(f" The remaining labels are: `{selection}`") if not selection: print("\n You removed all labels, time for a refill") if logger: logger.info(" You removed all labels, time for a refill") label_selector2.receive_labels(labels) receive_selection_to_assert2 = Receiver(parent='parent', name='assert_selection2', func=_receive_selection_to_assert2, signal_type=LabelData) # connect our function to selector model connect_ports(label_selector2.send_labels, receive_selection_to_assert2) # initialize label_selector.receive_labels(labels) label_selector2.receive_labels(labels) return column(*label_view.layout_components['widgets'], *label_view2.layout_components['widgets'], width=300)