def _make_ui_pane(self, hostheight):
layout = ipy.Layout(width='325px',
height=str(int(hostheight.rstrip('px')) - 50) + 'px')
#element_height = str(int(hostheight.rstrip('px')) - 125) + 'px'
element_height = None
# NOTE - element_height was used for the listbox-style orblist.
# HOWEVER ipywidgets 6.0 only displays those as a dropdown.
# This is therefore disabled until we can display listboxes again. -- AMV 7/16
# Orbital set selector
self.status_element = ipy.HTML(layout=ipy.Layout(width='inherit', height='20px'))
orbtype_label = ipy.Label("Orbital set:")
self.type_dropdown = ipy.Dropdown(options=list(self.wfn.orbitals.keys()))
initialtype = 'canonical'
if initialtype not in self.type_dropdown.options:
initialtype = next(iter(self.type_dropdown.options.keys()))
self.type_dropdown.value = initialtype
self.type_dropdown.observe(self.new_orb_type, 'value')
# List of orbitals in this set
orblist_label = ipy.Label("Orbital:")
self.orblist = ipy.Dropdown(options={None: None},
layout=ipy.Layout(width=layout.width, height=element_height))
traitlets.link((self.orblist, 'value'), (self, 'current_orbital'))
# Isovalue selector
isoval_label = ipy.Label('Isovalue:')
self.isoval_selector = ipy.FloatSlider(min=0.0, max=0.075,
value=0.01, step=0.00075,
readout_format='.4f',
layout=ipy.Layout(width=layout.width))
traitlets.link((self.isoval_selector, 'value'), (self, 'isoval'))
# Opacity selector
opacity_label = ipy.Label('Opacity:')
self.opacity_selector = ipy.FloatSlider(min=0.0, max=1.0,
value=0.8, step=0.01,
readout_format='.2f',
layout=ipy.Layout(width=layout.width))
traitlets.link((self.opacity_selector, 'value'), (self, 'orb_opacity'))
# Resolution selector
resolution_label = ipy.Label("Grid resolution:", layout=ipy.Layout(width=layout.width))
self.orb_resolution = ipy.Text(layout=ipy.Layout(width='75px',
positioning='bottom'))
self.orb_resolution.value = str(self.numpoints)
self.resolution_button = ipy.Button(description='Update resolution')
self.resolution_button.on_click(self.change_resolution)
traitlets.directional_link((self, 'numpoints'), (self.orb_resolution, 'value'),
transform=str)
self.uipane = ipy.VBox([self.status_element,
orbtype_label, self.type_dropdown,
orblist_label, self.orblist,
isoval_label, self.isoval_selector,
opacity_label, self.opacity_selector,
resolution_label, self.orb_resolution, self.resolution_button])
self.new_orb_type()
self.type_dropdown.observe(self.new_orb_type, 'value')
return self.uipane
python类Button()的实例源码
orbital_viewer.py 文件源码
项目:notebook-molecular-visualization
作者: Autodesk
项目源码
文件源码
阅读 34
收藏 0
点赞 0
评论 0
def __init__(self, xface):
self.xface = xface
if self.xface.is_installed():
version_string = xface.installed_version()
if not version_string:
version_string = 'unknown'
if version_string != xface.expectedversion:
version_string = '<span style="color:red">%s</span>' % version_string
self.maintext = ipy.HTML(
('<span class="nbv-table-row nbv-width-med nbv-monospace">'
' {xface.packagename}</span> '
'<span class="nbv-table-row nbv-monospace nbv-width-sm">'
' {localversion}</span> '
'<span class="nbv-table-row nbv-monospace nbv-width-sm">'
' {xface.expectedversion}</span>'
'<span class="nbv-width-sm nbv-table-row"> </span>' # empty space
).format(xface=xface,
localversion=(version_string if self.xface.is_installed()
else MISSING)))
if xface.required:
self.selector = ipy.ToggleButtons(options=['locally'])
elif not xface.is_installed():
self.selector = ipy.ToggleButtons(options=['in docker'],
button_style='warning')
else:
self.selector = ipy.ToggleButtons(options=['locally', 'in docker'],
value='in docker' if xface.force_remote else 'locally',
button_style='info')
self.selector.observe(self._toggle, 'value')
self.selector.add_class('nbv-width-lg')
self.selector.add_class("nbv-table-row")
children = [self.maintext, self.selector]
if not self.xface.required and self.xface.is_installed():
self.save_button = ipy.Button(description='Make default')
self.save_button.on_click(self.save_selection)
self.save_button.add_class('nbv-table-row')
children.append(self.save_button)
super().__init__(children=children,
layout=ipy.Layout(width='100%', align_items='flex-end'))
configurator.py 文件源码
项目:notebook-molecular-visualization
作者: Autodesk
项目源码
文件源码
阅读 28
收藏 0
点赞 0
评论 0
def __init__(self, paramdef):
super(ParamSelector, self).__init__(layout=ipy.Layout(display='flex',
flex_flow='nowrap',
align_content='stretch'))
self.paramdef = paramdef
children = []
self.name = ipy.HTML("<p style='text-align:right'>%s:</p>" % paramdef.displayname,
layout=ipy.Layout(width='200px'))
children.append(self.name)
if paramdef.choices:
self.selector = ipy.Dropdown(options=paramdef.choices, **self.WIDGETKWARGS)
elif paramdef.type == bool:
self.selector = ipy.ToggleButtons(options=[True, False], **self.WIDGETKWARGS)
elif paramdef.units:
self.selector = UnitText(units=paramdef.units, **self.WIDGETKWARGS)
elif paramdef.type == float:
self.selector = ipy.FloatText(**self.WIDGETKWARGS)
elif paramdef.type == int:
self.selector = ipy.IntText(**self.WIDGETKWARGS)
elif paramdef.type == str:
self.selector = ipy.Text(**self.WIDGETKWARGS)
else:
self.selector = ReadOnlyRepr(**self.WIDGETKWARGS)
children.append(self.selector)
children = [self.name, self.selector]
self.default_button = None
if paramdef.default:
self.default_button = ipy.Button(description='Default',
tooltip='Set to default: %s' % self.paramdef.default,
layout=ipy.Layout(width='75px'))
self.default_button.on_click(self.default)
children.append(self.default_button)
self.default()
self.help_link = None
if paramdef.help_url:
self.help_link = ipy.HTML('<a href="%s" target="_blank">?</a>' % paramdef.help_url)
children.append(self.help_link)
self.children = children
def __init__(self, mol):
self._current_shapes = []
self.mol = mol
self.tolerance = 0.3 * u.angstrom
self.original_coords = mol.positions.copy()
self.showing = ipy.HTML()
self.viewer = mol.draw3d(width='650px')
""":type viewer: moldesign.viewer.GeometryViewer"""
self.description = ipy.HTML()
self.symm_selector = ipy.Select()
self.symm_selector.observe(self.show_symmetry, names='value')
self.apply_button = ipy.Button(description='Symmetrize')
self.apply_button.on_click(self.apply_selected_symmetry)
self.reset_button = ipy.Button(description='Reset')
self.reset_button.on_click(self.reset_coords)
self.apply_all_button = ipy.Button(description='Apply all',
layout=ipy.Layout(padding='10px'))
self.apply_all_button.on_click(self.set_highest_symmetry)
self.tolerance_descrip = ipy.HTML(u'<small>tolerance/\u212B</small>',)
self.tolerance_chooser = ipy.BoundedFloatText(value=self.tolerance.value_in(u.angstrom),
min=0.0)
self.recalculate_button = ipy.Button(description='Recalculate')
self.recalculate_button.on_click(self.coords_changed)
self.symm_pane = VBox([self.description,
self.symm_selector,
HBox([self.apply_button, self.reset_button]),
self.apply_all_button,
HBox([self.tolerance_chooser, self.recalculate_button]),
self.tolerance_descrip],
layout=ipy.Layout(width='325px'))
self.symmetry = None
self.coords_changed()
self.hbox = HBox([VBox([self.viewer, self.showing]), self.symm_pane])
super().__init__([self.hbox])
def __init__(self, *args, **kwargs):
# Compute selected and unselected values
options = kwargs.get('options', {})
if isinstance(options, list):
options = named_objs([(opt, opt) for opt in options])
self._reverse_lookup = {v: k for k, v in options.items()}
selected = [self._reverse_lookup[v] for v in kwargs.get('value', [])]
unselected = [k for k in options if k not in selected]
# Define whitelist and blacklist
self._lists = {False: SelectMultiple(options=unselected),
True: SelectMultiple(options=selected)}
self._lists[False].observe(self._update_selection, 'value')
self._lists[True].observe(self._update_selection, 'value')
# Define buttons
button_layout = Layout(width='50px')
self._buttons = {False: Button(description='<<', layout=button_layout),
True: Button(description='>>', layout=button_layout)}
self._buttons[False].on_click(self._apply_selection)
self._buttons[True].on_click(self._apply_selection)
# Define search
self._search = {False: Text(placeholder='Filter available options'),
True: Text(placeholder='Filter selected options')}
self._search[False].observe(self._filter_options, 'value')
self._search[True].observe(self._filter_options, 'value')
# Define Layout
no_margin = Layout(margin='0')
row_layout = Layout(margin='0', display='flex', justify_content='space-between')
search_row = HBox([self._search[False], self._search[True]])
search_row.layout = row_layout
button_box = VBox([self._buttons[True], self._buttons[False]],
layout=Layout(margin='auto 0'))
tab_row = HBox([self._lists[False], button_box, self._lists[True]])
tab_row.layout = row_layout
self._composite = VBox([search_row, tab_row], layout=no_margin)
self.observe(self._update_options, 'options')
self.observe(self._update_value, 'value')
self._selected = {False: [], True: []}
self._query = {False: '', True: ''}
super(CrossSelect, self).__init__(*args, **dict(kwargs, options=options))