Example #1
0
    def _value_changed(self, __ ,value):
        title = widgets.HTMLWidget(value ='<h5>%s</h5>' % self.description)
        children = [title]
        for elem in value:
            wcont = widgets.ContainerWidget(description = str(elem))
            wtitle = widgets.LatexWidget(value = str(elem))
            
            edit_button = widgets.ButtonWidget(description = "Edit")
            delete_button = widgets.ButtonWidget(description = "Delete")
            wcont.children = [wtitle, edit_button, delete_button]
            
            def edit_f(button):
                if self.add_representation:
                    wr =  self.add_representation(self.klass, 
                          container_widget = widgets.PopupWidget, 
                          )
                else:
                    raise NotImplementedError() 
                def edit_callback(obj):
                    wr.cont.close()
                wr.edit_object(elem)
                wr.edit_callback = edit_callback
            
            edit_button.on_click(edit_f)
            
            def delete_f(button):
                l = list(self.value)
                l.remove(elem)
                self.value = l
            
            delete_button.on_click(delete_f)
            
            
            children.append(wcont)
            
            wcont.on_displayed(self._set_style)
            
        add_button = widgets.ButtonWidget(description = "Add %s" % 
                    self.klass.__name__)

        def add_f(button):
            if self.add_representation:
                
                wr =  self.add_representation(self.klass, 
                      container_widget = widgets.PopupWidget, 
                      )
                def handler(obj):
                    self.value = list(self.value) + [obj]
                    wr.cont.close()
                wr.create_handler = handler
            else:
                raise NotImplementedError() 
            wr.create_object()
        
            
             
        add_button.on_click(add_f)
        children.append(add_button)
        self.children = children
        self._fire_children_displayed()
Example #2
0
    def _value_changed(self, value):
        title = widgets.LatexWidget(self.description)
        children = [title]
        for elem in value:
            wcont = widgets.ContainerWidget(description = str(elem))
            wtitle = widgets.LatexWidget(value = str(elem))
            
            edit_button = widgets.ButtonWidget(description = "Edit")
            delete_button = widgets.ButtonWidget(description = "Delete")
            wcont.children = [wtitle, edit_button, delete_button]
            
            children.append(wcont)
            
        add_button = widgets.ButtonWidget(description = "Add Command")

        def add_f(button):
            if self.add_representation:
                wr =  self.add_representation(self.klass, 
                      container_widget = widgets.PopupWidget)
            else:
                raise NotImplementedError() 
            wr.create_object()
             
        add_button.on_click(add_f)
        children.append(add_button)
        self.children = children
Example #3
0
    def __init__(self):
        self.stormStuff = StormNameData().splitStormInfo()
        years = sorted(self.stormStuff.groupby(["Year"]).groups.keys())

        # Slider to select year for file
        self.menuYears = widgets.IntSliderWidget(min=1851,
                                                 max=2014,
                                                 step=1,
                                                 value=2014,
                                                 description="Year")
        self.menuNames = widgets.DropdownWidget()
        self.menuNames.on_trait_change(self._createUrl, 'value')

        # Button to create dropdown menu of storms for the selected year
        self.buttonName = widgets.ButtonWidget(
            description="Get Storm Names")  #, value = menuYears.value)
        self.buttonName.on_click(self._updateNames)

        # Button to call the plotting class and other necessary classes
        self.plottingButton = widgets.ButtonWidget(
            description="Plot Selected Storm", disabled=True)

        # Container widget to hold storm selection widgets
        self.stormSelector = widgets.ContainerWidget(children=[
            self.menuYears, self.buttonName, self.menuNames,
            self.plottingButton
        ],
                                                     visible=True)

        # Container widget to hold both storm selectign widgets and plotting button
        self.form = widgets.ContainerWidget()
        self.form.children = [self.stormSelector]
        display(self.form)
Example #4
0
def factorizer():
    box = widgets.ContainerWidget()
    header = widgets.HTMLWidget(value="<h1>Integer Factorizer</h1><br>")
    number = widgets.IntSliderWidget(description="Number:", value=100)
    speed = widgets.FloatSliderWidget(description="Delay:",
                                      min=0.0,
                                      max=0.2,
                                      value=0.1,
                                      step=0.01)

    subbox = widgets.ContainerWidget()
    button = widgets.ButtonWidget(description="Calculate")
    subbox.children = [button]

    box.children = [header, number, speed, subbox]
    display(box)

    box.add_class('align-center')
    box.add_class('center')
    box.add_class('well well-small')
    box.set_css('width', 'auto')

    subbox.remove_class('vbox')
    subbox.add_class('hbox')

    # subbox.add_class('end')

    def handle_caclulate(sender):
        plot_primes(number.value, delay=speed.value)

    button.on_click(handle_caclulate)
Example #5
0
 def displayFileDialog(self):
     self.inputFile = widgets.TextWidget(
         description='Input file name (csv)')
     button = widgets.ButtonWidget(description="Process file")
     display(self.inputFile, button)
     processCsvFileFn = lambda fileName: self.processCsvFile()
     button.on_click(processCsvFileFn)
Example #6
0
 def create_button(self):
     button = widgets.ButtonWidget(description = self.create_description())
     handler = lambda button: self.on_new_object()
     def handler(button):
         return self.on_new_object()
    
     button.on_click(handler)
     return button
Example #7
0
    def __init__(self, url, dataset, n=1000, post_proc=None):
        self.gen_url = url + "/make/" + dataset
        self.get_url = url + "/result/"
        self.db = None
        self.n = n
        self.post_proc = post_proc
        self.filters = "{}"
        self.data = self._get_data()

        self._b_resamp = widgets.ButtonWidget(description='Resample')
        self._b_resamp.on_click(lambda w: self._resample_data())

        self._toolbar = [self._b_resamp]
Example #8
0
    def _initialize_rerun_button(self):
        """Construct a button for controlling rerunning the simulations."""

        if ipython_less_than_3:
            self._rerun_button = widgets.ButtonWidget()
            self._rerun_button.add_class('btn-info')
        else:
            self._rerun_button = widgets.Button()
            self._rerun_button._dom_classes = ['btn-info']

        self._rerun_button_desc = "Rerun Simulation"
        self._rerun_button.description = self._rerun_button_desc

        self._rerun_button.on_click(self._rerun_button_callback)
Example #9
0
    def distributionSelector(self, directoryName):
        info = self.distributionInfo(directoryName)
        time = widgets.DropdownWidget(description="Time",
                                      values=info["times"],
                                      value=info["times"][-1])
        line = widgets.DropdownWidget(description="Sample line",
                                      values=info["lines"])
        varName = widgets.TextWidget(description="Variable Name")
        storeButton = widgets.ButtonWidget(description="Store to",
                                           disabled=True)

        def varname_change(name, value):
            storeButton.description = "Store to " + value
            if len(value) == 0:
                storeButton.disabled = True
            else:
                dis = False
                if not value[0].isalpha():
                    dis = True
                storeButton.disabled = dis

        varName.on_trait_change(varname_change, 'value')

        def store_clicked(b):
            l = line.value
            v = varName.value
            name = self.__getObjectName(self)
            store = self.__getStorageName()
            t = time.value
            print_("Storing distribution at t=", t, "on line", l, "from",
                   directoryName, "in", self.path, "to variable", v)
            cmd = "%s.distribution('%s','%s','%s')" % (name, directoryName, l,
                                                       t)
            if store:
                sname, sval = store
                create_code_cell("%s=%s('%s',lambda:%s)" % (v, sname, v, cmd),
                                 "below")
                val = sval(v, lambda: self.distribution(directoryName, l, t))
            else:
                create_code_cell("%s=%s" % (v, cmd), "below")
                val = self.distribution(directoryName, l, t)
            get_ipython().push({v: val})
            varName.value = ""

        storeButton.on_click(store_clicked)
        total = widgets.ContainerWidget(
            children=[line, time, varName, storeButton])
        total.add_class("vbox")
        display(total)
    def __init__(self, header='Automatic Display System'):
        '''
            This is simply an HTML display widget, and is going to
            contain stuff which you want to be displayed at any
            times
        '''

        self.header = widgets.LatexWidget(value=header)
        display(self.header)
        self.header.font_size = '15pt'
        self.header.margin = '5pt'

        self.clearButton = widgets.ButtonWidget(
            description='Clear the Display')
        self.clearButton.on_click(callback=self.clearDisplay)

        self.visibleButton = widgets.ButtonWidget(description='Toggle Display')
        self.visibleButton.on_click(callback=self.toggleDisplay)

        self.container = widgets.HBox()
        self.container.background_color = '#999999'
        self.container.width = '100%'
        display(self.container)
        self.container.children = [self.clearButton, self.visibleButton]

        self.textToDisplay = '[-------------- %s -----------]' % header
        self.dispFrame = widgets.HTMLWidget()
        self.dispFrame.background_color = '#F0F0F0'
        self.dispFrame.margin = '5pt'
        self.dispFrame.width = '100%'
        self.dispFrame.height = '300px'

        display(self.dispFrame)
        self.display()

        return
Example #11
0
    def userControls(self):
        # Button to select new storm from StormSelector
        self.selectStorm = widgets.ButtonWidget(description="Select New Storm",
                                                visible=True)
        self.selectStorm.on_click(selectNewStorm)

        # Model selection widgets and controls to change model
        self.modelSelection = widgets.DropdownWidget(
            values=self.forecast.groupby(["Group"]).groups.keys(), value="NHC")
        self.modelSelection.on_trait_change(self.onChangeModel, 'value')
        # Slider widget to move plots through time
        self.frameNumber = widgets.IntSliderWidget(min=0,
                                                   max=1,
                                                   value=0,
                                                   step=1,
                                                   description="Time")

        # Button widgets to advance and retract time frames
        add = widgets.ButtonWidget(description="+")
        subtract = widgets.ButtonWidget(description="-")
        add.on_click(self.advanceFrame)
        subtract.on_click(self.subtractFrame)

        # Checkbox to add multiple tracks to plot
        clearAll = widgets.ButtonWidget(description="Clear Plot")
        clearAll.on_click(self.clearPlot)
        self.check = widgets.CheckboxWidget(description="Add multiple tracks:",
                                            value=False)
        # Widgets to tracks to plot
        self.newTrackMenu = widgets.DropdownWidget(
            values=self.forecast.groupby(["Group"]).groups.keys())
        self.addTrackButton = widgets.ButtonWidget(description="Add New Track")
        self.plotMultiTrackButton = widgets.ButtonWidget(
            description="Plot New Tracks")
        # Container that holds multiple track widgets
        self.addNewTrack = widgets.ContainerWidget(
            visible=False,
            children=[
                self.newTrackMenu, self.addTrackButton,
                self.plotMultiTrackButton, clearAll
            ])
        # Adding actions to control frameNumber slider widget
        self.addTrackButton.on_click(self.addingNewTrack)
        self.plotMultiTrackButton.on_click(self.plottingTracks)
        self.check.on_trait_change(self.addTracks, 'value')

        if self.container is None:
            # Container that holds all widgets
            self.container = widgets.ContainerWidget(children=[
                self.selectStorm, self.frameNumber, add, subtract,
                self.modelSelection, self.check, self.addNewTrack
            ])
            display(self.container)

        self.container.visible = True
Example #12
0
    def make_form(self, css_classes):
        iocont = widgets.ContainerWidget()
        css_classes[iocont] = ('iobject-container')
        add_child(iocont, widgets.HTMLWidget(value="<h3>%s</h3>" % self.name))
        for inp in self.free_inputs:
            #We have to filter none kw...
            allkw = dict(description=inp.name,
                         value=inp.value,
                         default=inp.default)
            kw = {
                key: value
                for (key, value) in allkw.items() if value is not None
            }
            w = widgets.TextWidget(**kw)
            inp.widget = w
            w.traits()['value'].allow_none = True
            traitlets.link((inp, 'value'), (w, 'value'))

            def set_exec(_w):
                self.executed = False

            w.on_trait_change(set_exec, name='value')
            add_child(iocont, w)

        for out in self.free_outputs:
            w = widgets.HTMLWidget()
            out.widget = w
            add_child(iocont, w)
            w.traits()['value'].allow_none = True
            traitlets.link((out, 'value'), (w, 'value'))

        button = widgets.ButtonWidget(description="Execute %s" % self.name)

        def _run(b):
            self.executed = False
            self.run_sync()

        button.on_click(_run)
        add_child(iocont, button)

        self.widget = iocont
        self.widget.button = button
        self.has_widget = True
        self._toggle_executed()
        return iocont
Example #13
0
    def pickledDataSelector(self):
        pData = widgets.DropdownWidget(description="Pickled data file",
                                       values=self.sol.pickledData,
                                       value=self.sol.pickledData[0])
        varName = widgets.TextWidget(description="Variable Name")
        storeButton = widgets.ButtonWidget(description="Store to",
                                           disabled=True)

        def varname_change(name, value):
            storeButton.description = "Store to " + value
            if len(value) == 0:
                storeButton.disabled = True
            else:
                dis = False
                if not value[0].isalpha():
                    dis = True
                storeButton.disabled = dis

        varName.on_trait_change(varname_change, 'value')

        def store_clicked(b):
            p = pData.value
            v = varName.value
            name = self.__getObjectName(self)
            store = self.__getStorageName()
            print_("Storing Pickled Data from", p, "to variable", v)
            cmd = "%s.pickledData('%s')" % (name, p)
            if store:
                sname, sval = store
                create_code_cell("%s=%s('%s',lambda:%s)" % (v, sname, v, cmd),
                                 "below")
                val = sval(v, lambda: self.pickledData(p))
            else:
                create_code_cell("%s=%s" % (v, cmd), "below")
                val = self.pickledData(p)
            get_ipython().push({v: val})
            varName.value = ""

        storeButton.on_click(store_clicked)
        total = widgets.ContainerWidget(children=[pData, varName, storeButton])
        total.add_class("vbox")
        display(total)
Example #14
0
    def make_control(self):
        control_container = widgets.ContainerWidget()
        run_all_btn = widgets.ButtonWidget(description="Run all")

        def _ra(btn):
            result = self.run_all()
            display(result)

        run_all_btn.on_click(_ra)
        add_child(control_container,
                  widgets.HTMLWidget(value="<h2>%s</h2>" % self.name))
        add_child(control_container, run_all_btn)
        css_classes = {control_container: 'control-container'}
        for node in self.sorted_iterate():
            add_child(control_container, node.make_form(css_classes))
        display(control_container)
        for (widget, klass) in css_classes.items():
            if isinstance(widget, widgets.ContainerWidget):
                widget.remove_class("vbox")
            widget.add_class(klass)
Example #15
0
    def __init__(self, df, max=1000):
        if type(df) != pd.core.frame.DataFrame:
            raise ("DF_Backend requires a data frame")
        self.dashboard = None
        self.max = max
        self.filters = []

        df = df.reindex(np.random.permutation(df.index))
        self.global_df = df.head(self.max)
        self.df = df.drop(self.max)

        self._sample_size_widget = widgets.IntProgressWidget(
            value=0,
            min=0,
            max=2 * max,
            step=1,
            description='Sample Load:',
        )

        self._b_resamp = widgets.ButtonWidget(description='Resample')
        self._b_resamp.on_click(lambda w: self._resample_data())

        self._toolbar = [self._b_resamp, self._sample_size_widget]
        self._resample_data()
Example #16
0
from IPython.html import widgets
from IPython.display import display

btn = widgets.ButtonWidget(description="Click me!")
display(btn)

btn.add_class('btn-primary')
Example #17
0
    def sampleSelector(self, directoryName):
        info = self.sampleInfo(directoryName)
        mode = widgets.ToggleButtonsWidget(description="Mode",
                                           values=["Time", "Field"])
        field = widgets.DropdownWidget(description="Field",
                                       values=info["values"])
        time = widgets.DropdownWidget(description="Time",
                                      values=info["times"],
                                      value=info["times"][-1])
        line = widgets.DropdownWidget(description="Sample line",
                                      values=info["lines"])
        varName = widgets.TextWidget(description="Variable Name")
        storeButton = widgets.ButtonWidget(description="Store to",
                                           disabled=True)

        def mode_changed(name, value):
            if value == "Time":
                time.disabled = False
                field.disabled = True
            else:
                time.disabled = True
                field.disabled = False

        mode.on_trait_change(mode_changed, 'value')
        mode_changed('value', mode.value)

        def varname_change(name, value):
            storeButton.description = "Store to " + value
            if len(value) == 0:
                storeButton.disabled = True
            else:
                dis = False
                if not value[0].isalpha():
                    dis = True
                storeButton.disabled = dis

        varName.on_trait_change(varname_change, 'value')

        def store_clicked(b):
            l = line.value
            v = varName.value
            name = self.__getObjectName(self)
            store = self.__getStorageName()
            if mode.value == "Time":
                t = time.value
                print_("Storing fields at t=", t, "on line", l, "from",
                       directoryName, "in", self.path, "to variable", v)
                cmdBase = "%s.sampleTime('%s','%s','%s')" % (
                    name, directoryName, l, t)
                if store:
                    sname, sval = store
                    cmd = "%s=%s('%s',lambda:%s)" % (v, sname, v, cmdBase)
                    val = sval(v, lambda: self.sampleTime(directoryName, l, t))
                else:
                    cmd = "%s=%s" % (v, cmdBase)
                    val = self.sampleTime(directoryName, l, t)
            elif mode.value == "Field":
                f = field.value
                print_("Storing fields", f, " at all times on line", l, "from",
                       directoryName, "in", self.path, "to variable", v)
                cmdBase = "%s.sampleField('%s','%s','%s')" % (
                    name, directoryName, l, f)
                if store:
                    sname, sval = store
                    cmd = "%s=%s('%s',lambda:%s)" % (v, sname, v, cmdBase)
                    val = sval(v,
                               lambda: self.sampleField(directoryName, l, f))
                else:
                    cmd = "%s=%s" % (v, cmdBase)
                    val = self.sampleField(directoryName, l, f)
            else:
                print_("Unknown mode", mode)
                return
            create_code_cell(cmd, "below")
            get_ipython().push({v: val})
            varName.value = ""

        storeButton.on_click(store_clicked)
        total = widgets.ContainerWidget(
            children=[mode, line, field, time, varName, storeButton])
        total.add_class("vbox")
        display(total)
Example #18
0
    def timelineSelector(self, directoryName):
        info = self.timelineInfo(directoryName)
        lst = [widgets.LatexWidget(value="Fields:")]
        fieldsSelected = set()
        storeButton = widgets.ButtonWidget(description="Store to",
                                           disabled=True)

        def make_field_toggle(fName):
            def f(name, value):
                if value:
                    fieldsSelected.add(fName)
                else:
                    try:
                        fieldsSelected.remove(fName)
                    except KeyError:
                        pass  # this should not happen, but hey!
                if len(fieldsSelected) > 0:
                    storeButton.disabled = False
                else:
                    storeButton.disabled = True

            return f

        for f in info["fields"]:
            w = widgets.ToggleButtonWidget(description=f)
            w.on_trait_change(make_field_toggle(f), 'value')
            lst.append(w)
        fields = widgets.ContainerWidget(description="Fields", children=lst)
        fields.add_class("hbox")
        varName = widgets.TextWidget(description="Variable Name")

        def varname_change(name, value):
            storeButton.description = "Store to " + value
            if len(value) == 0 or len(fieldsSelected) == 0:
                storeButton.disabled = True
            else:
                dis = False
                if not value[0].isalpha():
                    dis = True
                storeButton.disabled = dis

        varName.on_trait_change(varname_change, 'value')

        def store_clicked(b):
            v = varName.value
            f = list(fieldsSelected)
            print_("Storing", f, "from", directoryName, "in", self.path,
                   "to variable", v)
            name = self.__getObjectName(self)
            store = self.__getStorageName()
            cmd = "%s.timeline('%s',%s)" % (name, directoryName, str(f))
            if store:
                sname, sval = store
                create_code_cell("%s=%s('%s',lambda:%s)" % (v, sname, v, cmd),
                                 "below")
                val = sval(v, lambda: self.timeline(directoryName, f))
            else:
                create_code_cell("%s=%s" % (v, cmd), "below")
                val = self.timeline(directoryName, f)
            get_ipython().push({v: val})
            varName.value = ""

        storeButton.on_click(store_clicked)
        total = widgets.ContainerWidget(
            children=[fields, varName, storeButton])
        total.add_class("vbox")
        display(total)
Example #19
0
txtBox = widgets.Text()
txtBox.value = stringdate

display(txtBox)


def on_value_change(name, value):
    global stringdate

    try:
        parser.parse(value)
        stringdate = value
    except:
        stringdate = datetime.now(pacific).isoformat(' ').split('.')[0]


txtBox.on_trait_change(on_value_change, 'value')

#Button

button = widgets.ButtonWidget(description="Change Date")
display(button)


def on_button_clicked(b):
    open(userinput, "w").write(stringdate)
    txtBox.value = stringdate


button.on_click(on_button_clicked)
Example #20
0
 def edit_button(self, obj):
     button = widgets.ButtonWidget(description = self.edit_description(obj))
     button.on_click(self.change_object_f(obj))
     return button
Example #21
0
    def display_ipython(self):
        """
        Method to display the visualization inside the 
        Ipython notebook. It is only supported by IPython
        versions>=2.0.0
        
        """

        self.create_static_html(silent=True)
        self._widget_dict = OrderedDict()
        self.container = widgets.ContainerWidget()
        components = []
        for var, init_val in \
            zip(self.constant_variables, self.constant_values):
            self._widget_dict[str(var)] = widgets.FloatTextWidget(
                value=init_val, description=str(var))
            components.append(self._widget_dict[str(var)])

        self.button = widgets.ButtonWidget(description="Rerun Simulations")

        def button_click(clicked):
            self.button.add_class('disabled')
            self.button.description = 'Rerunning Simulation ...'
            self.constant_values = []
            for i in self._widget_dict.values():
                self.constant_values.append(i.value)
            if self.system is not None:
                #update system constants
                self.system.constants = dict(
                    zip(self.system.constants, self.constant_values))
                self.generate_visualization_json_system(self.system)
            else:
                self.generate_visualization_json(
                    self.dynamic_variables,
                    self.constant_variables,
                    self.dynamic_values,
                    self.constant_values,
                    fps=self.fps,
                    outfile_prefix=self.outfile_prefix)
            self.create_static_html(overwrite=True, silent=True)
            js = 'jQuery("#json-input").val("{}");'.format(
                'static/' + self.scene_json_file)
            display(Javascript(js))
            display(Javascript('jQuery("#simulation-load").click()'))
            self.button.remove_class('disabled')

            self.button.description = 'Rerun Simulation'

        self.button.on_click(button_click)
        #components.append(button)
        html_file = open("static/index_ipython.html")
        self.html_widget = widgets.HTMLWidget(value=html_file.read().format(
            load_url='static/' + self.scene_json_file))
        self.container.children = components
        self.container.set_css({
            "max-height": "10em",
            "overflow-y": "scroll",
            "display": "block"
        })
        self.html_widget.set_css({"display": "block", "float": "left"})
        display(self.container)
        display(self.button)
        display(self.html_widget)
        self.button.add_class('btn-info')
Example #22
0
    def __init__(
        self, panels, lma_ctrl, scatter_ctrl, charge_lasso, d
    ):  #, station_number_selection, charge_lasso_widget, draw_lasso_widget, color_field_widget, animation_time_widget, animate_button, label, LMA_Controlsa, LMA_Controlsb, tools_popup, number_of_stations):
        self.panels = panels
        self.lma_ctrl = lma_ctrl
        self.d = d
        self.scatter_ctrl = scatter_ctrl
        self.charge_lasso = charge_lasso

        #Max Chi2 Value:
        chi2_selection = widgets.BoundedFloatTextWidget(
            description='Max Chi2:', min='0.0', max='1000.0', value='1')
        chi2_selection.set_css({
            'max-width': '30px',
        })
        chi2_selection.on_trait_change(self.max_chi2, 'value')

        #Station Number Selection:
        station_number_selection = widgets.DropdownWidget(
            description='Number of Stations:',
            values=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
            value=7)
        station_number_selection.set_css({
            'background-dropdown': '#888888',
            'color': 'white',
        })
        station_number_selection.on_trait_change(self.number_of_stations,
                                                 'value')

        #Charge Lasso and Draw Button:
        charge_lasso_widget = widgets.RadioButtonsWidget(
            description='Charge Selection:',
            values=["-1", "0", "1"],
            value="-1")
        charge_lasso_widget.on_trait_change(self.change_lasso_charge, 'value')

        draw_lasso_widget = widgets.ButtonWidget(description='Draw')
        draw_lasso_widget.set_css({
            'background': '#888888',
            'color': 'white',
        })
        draw_lasso_widget.on_click(self.lasso_button)

        #Color Field Selection:
        color_field_widget = widgets.RadioButtonsWidget(
            description='Color By:',
            values=["chi2", "time", "charge"],
            value="time")
        color_field_widget.on_trait_change(self.change_color_field, 'value')

        #Animate (Slider and Button) Optional Manual Numerical Input commented out:
        animation_time_widget = widgets.IntSliderWidget(
            description='Animation Time:', min='0', max='30')
        animation_time_widget.value = '5'
        # animation_time_widget = widgets.TextWidget(Description='Animation Time')
        # animation_time_widget.placeholder = "value"
        animate_button = widgets.ButtonWidget(description="Animate")
        animate_button.set_css({
            'display': 'flex',
            'align-content': 'flex-end',
            'background': '#888888',
            'color': 'white',
        })
        animate_button.on_click(self.run_animation_button)

        #FOR CONTAINERS AND POPUP
        label = widgets.LatexWidget(value='LMA Tools')
        label.set_css({
            'font-size': '20px',
            'font-weight': 'bold',
            'align-self': 'center',
            'padding': '15px',
            'background': 'd8d8d8',
        })

        LMA_Controlsa = widgets.ContainerWidget()
        LMA_Controlsa.children = [
            station_number_selection, charge_lasso_widget, draw_lasso_widget,
            chi2_selection
        ]
        LMA_Controlsa.set_css({
            'display': 'flex',
            'flex-direction': 'column',
            # 'max-width': '300px',
            'flex-flow': 'row wrap',
            'align-content': 'flex-start',
            'padding': '10px',
            'background': '#e8e8e8',
            'font-weight': 'bold',
        })
        LMA_Controlsa.remove_class('vbox')
        LMA_Controlsa.add_class('hbox')

        LMA_Controlsb = widgets.ContainerWidget()
        LMA_Controlsb.children = [
            color_field_widget, animation_time_widget, animate_button
        ]
        LMA_Controlsb.set_css({
            'display': 'flex',
            'flex-flow': 'wrap',
            'align-items': 'right',
            'columns': '1',
            'padding': '10px',
            'background': '#e8e8e8',
            'font-weight': 'bold',
        })
        LMA_Controlsb.remove_class('vbox')
        LMA_Controlsb.add_class('hbox')

        tools_popup = widgets.PopupWidget(description='LMA Control Hub')
        tools_popup.set_css({
            'font-size': '14px',
            'align-self': 'center',
            'padding': '15px',
            'border': '5px ridge #989898',
            'background': '#e8e8e8',
        })
        tools_popup.children = [label, LMA_Controlsa, LMA_Controlsb]

        self.chi2_selection = chi2_selection
        self.station_number_selection = station_number_selection
        self.charge_lasso_widget = charge_lasso_widget
        self.draw_lasso_widget = draw_lasso_widget
        self.color_field_widget = color_field_widget
        self.animation_time_widget = animation_time_widget
        self.animate_button = animate_button
        self.label = label
        self.LMA_Controlsa = LMA_Controlsa
        self.LMA_Controlsb = LMA_Controlsb
        self.tools_popup = tools_popup