def __init__(self, view):
        layout = Layout(width="initial")
        self._step_backward = Button(tooltip="Step backward",
                                     icon="step-backward",
                                     layout=layout)
        self._step_forward = Button(tooltip="Step forward",
                                    icon="step-forward",
                                    layout=layout)
        self._begin = Button(tooltip="Begin",
                             icon="fast-backward",
                             layout=layout)
        self._end = Button(tooltip="End", icon="fast-forward", layout=layout)
        self._backward = Button(tooltip="Play backward",
                                icon="backward",
                                layout=layout)
        self._play = Button(tooltip="Play", icon="play", layout=layout)
        self._pause = Button(tooltip="Pause", icon="pause", layout=layout)
        self._frame_label = Label("frame: ")
        self._frame = Label("")
        self._speed_label = Label("speed: ")
        self._speed_slider = IntSlider(0, 0, 10, 1)
        player_controls = HBox([
            self._begin, self._backward, self._step_backward, self._pause,
            self._play, self._step_forward, self._end, self._frame_label,
            self._frame, self._speed_label, self._speed_slider
        ])
        VBox.__init__(self, [view, player_controls])

        self._model = PlayerModel(view, self)
        self._controller = PlayerThread(self._model, self).start()
    def __init__(self):
        self.niveau  = Dropdown(options=[('Niveau {}'.format(i), i) for i in RushHour.niveaux()])
        self.niveau.observe(lambda widget: self.change_niveau(widget.owner.value))

        self.voiture = Dropdown(options=[])
        self.modele = Plateau(1)
        self.vue = Figure(scale_x = LinearScale(min=0, max=self.modele.dimension),
                          scale_y = LinearScale(min=self.modele.dimension, max=0))
        self.vue.layout.width="75ex"
        self.vue.layout.width="75ex"
        self.vue.layout.height=self.vue.layout.width;

        self.vue.vue_voitures = {}
        for lettre, couleur in couleurs.items():
            vue_voiture = Lines(x=[], y=[],
                                scales={'x':self.vue.scale_x,
                                        'y':self.vue.scale_y},
                                fill='inside',
                                colors=[couleurs[lettre]],
                                visible=False,
                                tooltip=Tooltip(fields=["lettre"],show_labels=False),
                                )
            vue_voiture.lettre = "coucou" # lettre
            vue_voiture.on_click(lambda vue_voiture, _: self.choix_voiture(vue_voiture.lettre))
            self.vue.vue_voitures[lettre] = vue_voiture
        self.vue.marks = list(self.vue.vue_voitures.values())

        boutton_solution = Button(description="Solution")
        boutton_solution.on_click(self.montre_solution)
        VBox.__init__(self, [HBox([self.niveau, boutton_solution]),
                            self.vue,
                            self.boutton_direction('U'),
                            HBox([self.boutton_direction('L'), self.voiture, self.boutton_direction('R')]),
                            self.boutton_direction('D')
                           ])
        self.layout.align_items = 'center'
        self.change_niveau(1)
Beispiel #3
0
    def __init__(self, database_path='./'):
        VBox.__init__(self, layout=Layout(width="100%", min_height="800px"))
        self.database_path = database_path
        dbs = Dropdown(description='DB', layout=Layout(width="auto"))
        dbs.observe(lambda event, this=self: this.loadFields(event), "value")
        self.current = "Database"
        layout = {
            "Database": {
                'action': (lambda this=self: this.toDatabase()),
                'click':
                (lambda event, this=self: this.clickPanel("Database")),
                'children': {
                    "list":
                    dbs,
                    "fields":
                    VBox(layout=Layout(width="100%", border="1px solid #6666"))
                },
            },
            "Filters": {
                'action': (lambda this=self: this.toFilters()),
                'click': (lambda event, this=self: this.clickPanel("Filters")),
                'children': {
                    "grid": VBox()
                },
            },
            "Exploration": {
                'action': (lambda this=self: this.toExploration()),
                'click':
                (lambda event, this=self: this.clickPanel("Exploration")),
                'children': {
                    "grid": HBox()
                },
            },
            "Visualization": {
                'action': (lambda this=self: this.toVisualization()),
                'click':
                (lambda event, this=self: this.clickPanel("Visualization")),
                'children': {
                    "main_view": Output(),
                    "secondary_view": Output()
                },
            },
        }

        self.ui = self.createDefaultLayout(layout)

        content = []
        for i, k in enumerate(self.ui.keys()):
            if 'container' in self.ui[k]:
                content.append(self.ui[k]["container"])

        tabs = []
        for i, k in enumerate(self.ui.keys()):
            if 'container' in self.ui[k]:
                self.ui[k]["tab"] = ToggleButton(value=False,
                                                 description=k,
                                                 layout=Layout(width="auto"),
                                                 disabled=True)
                self.ui[k]["tab"].observe(
                    lambda a, b=k, c=self: self.eventPanel(a, b), "value")
                tabs.append(self.ui[k]["tab"])

        self.children = [
            HBox(tabs, layout=Layout(width="auto")),
            VBox(content, layout=Layout(width="auto"))
        ]
        self.clickPanel(self.current)
    def __init__(self,
                 obj,
                 adapter=None,
                 display_convention='en',
                 cell_layout=None,
                 cell_widget_classes=[TextCell],
                 cell_widget_class_index=lambda x: 0,
                 css_classes=[],
                 css_class_index=None,
                 blank_widget_class=BlankCell,
                 addable_widget_class=AddableTextCell):
        r"""
        Grid View Widget initialization.

        INPUT:
            - ``cell_widget_classes``: a list of classes for building cell widgets
            - ``blank_widget_class``: a widget class for building blank cells
            - ``addable_widget_class``: a widget class for building blank cells

        TESTS ::

            sage: from sage_combinat_widgets.grid_view_widget import *
            sage: t = StandardTableaux(15).random_element()
            sage: w = GridViewWidget(t)
            sage: from sage.graphs.generators.families import AztecDiamondGraph
            sage: az = AztecDiamondGraph(4)
            sage: w = GridViewWidget(az, cell_widget_classes=[ButtonCell], blank_widget_class=BlankButton)

        Compatibility with `@interact`: the widget should be a
        :class:`ipywidgets.ValueWidget` and have a description field::

            sage: isinstance(w, ValueWidget)
            True
            sage: w.description
            "Grid view widget for Jupyter notebook with cell class '<class 'sage_combinat_widgets.grid_view_widget.ButtonCell'>', for object 'Subgraph of (2D Grid Graph for [8, 8])'"

        Basic compabitility test::

            sage: def f(x = w): return az.average_distance()
            sage: f = interact(f)
            Interactive function <function f at ...> with 1 widget
              x: GridViewWidget(value=Aztec Diamond graph of order 4, ...)
        """
        GridViewEditor.__init__(self, obj, adapter)
        VBox.__init__(self)
        self._model_id = get_model_id(self)
        self.display_convention = display_convention
        self.description = "Grid view widget for Jupyter notebook with cell class '%s', for object '%s'" % (
            cell_widget_classes[0], obj)
        if not cell_layout:
            if issubclass(self.value.__class__, GenericGraph):  # i.e. a graph
                cell_layout = buttoncell_smaller_layout
            else:
                cell_layout = textcell_layout
        self.cell_layout = cell_layout
        self.cell_widget_classes = cell_widget_classes
        self.cell_widget_class_index = cell_widget_class_index
        self.css_classes = css_classes
        self.css_class_index = css_class_index or cell_widget_class_index or (
            lambda x: 0)
        try:
            self.displaytype = cell_widget_classes[0].displaytype
        except:
            self.displaytype = None  # Stateless cells
        self.cast = lambda x: self.adapter.display_to_cell(x, self.displaytype)
        self.blank_widget_class = blank_widget_class
        self.addable_widget_class = addable_widget_class
        self.draw()
        self.donottrack = False
    def __init__(self, player):

        self.widget = ipywidgets.HTML(
            value="",
            placeholder='',
            description='',
        )
        output = ipywidgets.Output()
        self.player = player

        # les méthodes suivantes définissent les actions réaliser par les boutons correspondants
        def fast_backward_clicked(b):
            with output:
                self.player.begin()
                self.player.pause()

        def backward_clicked(b):
            with output:
                self.player.backward()

        def step_backward_clicked(b):
            with output:
                self.player.pause()
                self.player.step_backward()

        def pause_clicked(b):
            with output:
                self.player.pause()

        def step_forward_clicked(b):
            with output:
                self.player.pause()
                self.player.step_forward()

        def play_clicked(b):
            with output:
                self.player.play()

        def fast_forward_clicked(b):
            with output:
                self.player.pause()
                self.player.end()

        #créer un slider de vitesse
        slider = ipywidgets.FloatSlider(value=1.0,
                                        min=0.0,
                                        max=6.0,
                                        step=1,
                                        description="Speed:")

        #observe le changement du slider vitesse et appel set_fps
        def on_value_change(change):
            value = int(change['new'])
            self.player.set_fps(2**value)

        #création des boutons du widget et liaison des méthodes et des boutons
        slider.observe(on_value_change, names='value')

        play = ipywidgets.Button(description="",
                                 icon='fa-play',
                                 layout=Layout(width='35px'))
        fast_backward = ipywidgets.Button(description="",
                                          icon='fa-fast-backward',
                                          layout=Layout(width='35px'))
        backward = ipywidgets.Button(description="",
                                     icon='fa-backward',
                                     layout=Layout(width='35px'))
        step_backward = ipywidgets.Button(description="",
                                          icon='fa-step-backward',
                                          layout=Layout(width='35px'))
        pause = ipywidgets.Button(description="",
                                  icon='fa-pause',
                                  layout=Layout(width='35px'))
        step_forward = ipywidgets.Button(description="",
                                         icon='fa-step-forward',
                                         layout=Layout(width='35px'))
        fast_forward = ipywidgets.Button(description="",
                                         icon='fa-fast-forward',
                                         layout=Layout(width='35px'))

        play.on_click(play_clicked)
        fast_backward.on_click(fast_backward_clicked)
        backward.on_click(backward_clicked)
        step_backward.on_click(step_backward_clicked)
        pause.on_click(pause_clicked)
        step_forward.on_click(step_forward_clicked)
        fast_forward.on_click(fast_forward_clicked)

        self.player = player
        self.player.reset(self.player.view.value)

        #méthode qui gère le message afficher
        def fctOut(slid_time):
            print(self.player.history[slid_time].message)

        out = widgets.interactive_output(
            fctOut, {"slid_time": self.player.slider_time})

        self.affichage = ipywidgets.HBox([
            fast_backward, backward, step_backward, pause, step_forward, play,
            fast_forward, self.player.slider_time, slider
        ])
        VBox.__init__(self, [self.player.view, self.affichage, out])
Beispiel #6
0
    def __init__(self, player):

        self.widget = ipywidgets.HTML(
            value="",
            placeholder='',
            description='',
        )
        output = ipywidgets.Output()
        self.player = player

        def fast_backward_clicked(b):
            with output:
                self.player.begin()
                self.player.pause()

        def backward_clicked(b):
            with output:
                self.player.backward()

        def step_backward_clicked(b):
            with output:
                self.player.pause()
                self.player.step_backward()

        def pause_clicked(b):
            with output:
                self.player.pause()

        def step_forward_clicked(b):
            with output:
                self.player.pause()
                self.player.step_forward()

        def play_clicked(b):
            with output:
                self.player.play()

        def fast_forward_clicked(b):
            with output:
                self.player.pause()
                self.player.end()

        # self.slider_time=ipywidgets.IntSlider(
        # value=0,
        # min=0,
        # max=len(self.player.history),
        # step=1,
        #     description="time:"
        # )

        slider = ipywidgets.FloatSlider(value=1.0,
                                        min=0.0,
                                        max=6.0,
                                        step=1,
                                        description="Speed:")

        # 2puissance speed affiché ou alors nous affiché juste la valeur et pas "speed " 2** = puissance
        def on_value_change(change):
            value = int(change['new'])
            self.player.set_fps(2**value)

        slider.observe(on_value_change, names='value')

        play = ipywidgets.Button(description="",
                                 icon='play',
                                 layout=Layout(width='35px'))
        fast_backward = ipywidgets.Button(description="",
                                          icon='fast-backward',
                                          layout=Layout(width='35px'))
        backward = ipywidgets.Button(description="",
                                     icon='backward',
                                     layout=Layout(width='35px'))
        step_backward = ipywidgets.Button(description="",
                                          icon='step-backward',
                                          layout=Layout(width='35px'))
        pause = ipywidgets.Button(description="",
                                  icon='pause',
                                  layout=Layout(width='35px'))
        step_forward = ipywidgets.Button(description="",
                                         icon='step-forward',
                                         layout=Layout(width='35px'))
        fast_forward = ipywidgets.Button(description="",
                                         icon='fast-forward',
                                         layout=Layout(width='35px'))

        play.on_click(play_clicked)
        fast_backward.on_click(fast_backward_clicked)
        backward.on_click(backward_clicked)
        step_backward.on_click(step_backward_clicked)
        pause.on_click(pause_clicked)
        step_forward.on_click(step_forward_clicked)
        fast_forward.on_click(fast_forward_clicked)

        self.affichage = ipywidgets.HBox([
            fast_backward, backward, step_backward, pause, step_forward, play,
            fast_forward, slider
        ])
        VBox.__init__(
            self, [self.player.view, self.player.slider_time, self.affichage])
        #link((self.slider_time,'value'),(self.player,'time'))

        #self.widget_affichage=VBox([self.player.view,self.slider_time,self.affichage])
        #self.player.time=0
        self.player = player