def get_widget(name, trait): name = name.title().replace("_" ," " ).title() kw = dict(description = name, value = trait.get_default_value()) if hasattr(trait, 'values'): values = trait.values if not isinstance(values, Mapping): values = {str(val): val for val in values} if trait.allow_none: values[""] = None kw['values'] = values if 'widget' in trait._metadata: widget = trait._metadata['widget'] if inspect.isclass(widget): widget = widget(**kw) elif 'choices' in trait._metadata: choices = {str(item): item for item in trait._metadata['choices']} kw['values'] = choices widget = widgets.DropdownWidget(**kw) elif 'choose_from' in trait._metadata: choices = trait._metadata['choose_from']() if trait.allow_none: choices[""] = None kw['values'] = choices widget = widgets.DropdownWidget(**kw) else: widget = widget_mapping[type(trait)](**kw) return widget
def get_widget(self, name, trait, value): description = name.title().replace("_" ," " ).title() kw = dict(description = description, value = value) if hasattr(trait, 'values'): values = trait.values if not isinstance(values, Mapping): values = {str(val): val for val in values} if trait.allow_none: values[""] = None kw['values'] = values if 'widget' in trait._metadata: widget = trait._metadata['widget'] if inspect.isclass(widget): widget = widget(**kw) elif 'choices' in trait._metadata: choices = {str(item): item for item in trait._metadata['choices']} kw['values'] = choices widget = widgets.DropdownWidget(**kw) elif 'choose_from' in trait._metadata: choices = trait._metadata['choose_from']() if trait.allow_none: choices[""] = None kw['values'] = choices widget = widgets.DropdownWidget(**kw) elif (isinstance(trait, List) and trait._trait): if isinstance(trait._trait, Instance): trait._trait._resolve_classes() if issubclass(trait._trait.klass, HasTraits): widget = ListWidget(trait._trait.klass, **kw) else: widget = self.widget_mapping[type(trait)](**kw) return widget
def __init__(self, **kwargs): super(self.__class__, self).__init__(**kwargs) colours = [ "black", "red", "orange", "yellow", "green", "blue", "magenta", "cyan" ] # allow toggling of SVG draw mode draw_toggle_values = [ "select", "rect", "circle", "ellipse", "line", "path" ] self.draw_toggle = widgets.ToggleButtonsWidget( values=draw_toggle_values, description="Choose drawing tool:") # set up the stroke controls self.stroke_picker = widgets.DropdownWidget( values=colours, description="Stroke colour:") self.stroke_width_slider = widgets.FloatSliderWidget( min=0, max=20, value=3, description="Stroke width:") self.stroke_container = HorizontalContainerWidget() self.stroke_container.children = [ self.stroke_picker, self.stroke_width_slider ] # set up the fill controls self.fill_picker = widgets.DropdownWidget(values=["none"] + colours, description="Fill colour:") self.fill_opacity_slider = widgets.FloatSliderWidget( min=0, max=1, value=0.5, description="Fill opacity:") self.fill_container = HorizontalContainerWidget() self.fill_container.children = [ self.fill_picker, self.fill_opacity_slider ] # the main SVG self.svg = SVGWidget() # border the SVG self.svg.set_css('border', '1px solid black') # link the control widgets to the SVG control variables self.mode_link = traitlets.link((self.draw_toggle, 'value'), (self.svg, 'mode')) self.stroke_link = traitlets.link((self.stroke_picker, 'value'), (self.svg, 'stroke')) self.stroke_width_link = traitlets.link( (self.stroke_width_slider, 'value'), (self.svg, 'stroke_width')) self.fill_link = traitlets.link((self.fill_picker, 'value'), (self.svg, 'fill')) self.fill_opacity_link = traitlets.link( (self.fill_opacity_slider, 'value'), (self.svg, 'fill_opacity')) # define the main container's children self.children = [ self.draw_toggle, self.stroke_container, self.fill_container, self.svg ]
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
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): 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)
def __init__(self, *args, **kwargs): self.defaults = dict( metabotype=METABOTYPE_ALL, database=DATABASE_HMDB, ph=SAMPLE_PH7_10, solvent=SOLVENT_WATER, frequency=FREQUENCY_600, method=METHOD_HIGHEST_NUMBER_NEIGHBOURHOOD, noise=DEFAULT_NOISE_THRESHOLD, confidence=DEFAULT_CONFIDENCE_THRESHOLD, tolerance=DEFAULT_TOLERANCE ) # Overwrite the settings using kwargs passed on create self.settings = dict( self.defaults.items() + kwargs.items() ) # Set up widgets self.form = widgets.ContainerWidget() self.form.set_css({'width':'20ex'}, selector='.widget-hlabel') w_metabotype = widgets.DropdownWidget(description="Metabotype:", value=self.settings['metabotype'], values=METABOTYPES) w_metabotype.on_trait_change(lambda t, value: self.set_value('metabotype', value), 'value' ) w_database = widgets.DropdownWidget(description="Database:", value=self.settings['database'], values=DATABASES) w_database.on_trait_change(lambda t, value: self.set_value('database', value), 'value' ) w_ph = widgets.DropdownWidget(description="pH:", value=self.settings['ph'], values=SAMPLE_PHS) w_ph.on_trait_change(lambda t, value: self.set_value('ph', value), 'value' ) w_solvent = widgets.DropdownWidget(description="Solvent:", value=self.settings['solvent'], values=SOLVENTS) w_solvent.on_trait_change(lambda t, value: self.set_value('solvent', value), 'value' ) w_frequency = widgets.DropdownWidget(description="Frequency MHz:", value=self.settings['frequency'], values=FREQUENCIES) w_frequency.on_trait_change(lambda t, value: self.set_value('frequency', value), 'value' ) w_method = widgets.DropdownWidget(description="Method:", value=self.settings['method'], values=METHODS) w_method.on_trait_change(lambda t, value: self.set_value('method', value), 'value' ) w_noise = widgets.FloatSliderWidget(description="Noise threshold:", value=self.settings['noise'], min=0., max=10., step=0.01) w_noise.on_trait_change(lambda t, value: self.set_value('noise', value), 'value' ) w_confidence = widgets.FloatSliderWidget(description="Confidence threshold:", value=self.settings['confidence'], min=0., max=1., step=0.1) w_confidence.on_trait_change(lambda t, value: self.set_value('confidence', value), 'value' ) w_tolerance = widgets.FloatSliderWidget(description="Shift tolerance:", value=self.settings['tolerance'], min=0., max=10., step=0.01) w_tolerance.on_trait_change(lambda t, value: self.set_value('tolerance', value), 'value' ) self.form.children = [ w_metabotype, w_database, w_ph, w_solvent, w_frequency, w_method, w_noise, w_confidence, w_tolerance]
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)
from IPython.html import widgets from IPython.display import display options = { 'first value': 0, 'second value': 1, 'third value': 2, } s = widgets.SelectWidget() s.values = options display(s) d = widgets.DropdownWidget() d.values = options display(d)
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)
) if show_javascript: display(widgets.PopupWidget(children=(widgets.HTMLWidget(value='<div style="width:600px; height: 400px; overflow:scroll;"><pre>{}</pre></div>'.format(rendered_template)),))) display(Javascript(rendered_template)) # In[30]: i = interact( display_chart_chartjs, sc_est2012_sex=widgets.fixed(sc_est2012_sex), show_javascript=widgets.Widget(CheckboxWidget(value=False), show=widgets.DropdownWidget( values={'By Region':'by_region', 'By Division': 'by_division', 'By State': 'by_state'}, value='by_region' ), div=widgets.HTMLWidget(value='<canvas width=800 height=400 id="chart_chartjs"></canvas>') ) # The library generates an beautiful and simple animated column chart. There's not much in terms of customization of the Chart.js charts, but that makes it very easy to use. # ## Part 3 - Embedding HighCharts # Somewhat in between Charts.js and D3 is [HighCharts](http://www.highcharts.com/). It can produce beautiful and professional looking animated charts without much coding and it can be customized if needed. This time we'll plot the age of the population by region and division. We're going to show one data series per bucket of 20 years. Before we can begin, we need to declare the requirement: # In[ ]: get_ipython().run_cell_magic(u'javascript', u'', u"require.config({\n paths: {\n highcharts: '//cdnjs.cloudflare.com/ajax/libs/highcharts/4.0.1/highcharts'\n }\n});")
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