def __init__(self, gui): self.gui = gui self.win = win = ui.Window(_('Render current view in povray ... ')) win.add(ui.Label(_("Rendering %d atoms.") % len(self.gui.atoms))) guiwidth, guiheight = self.get_guisize() self.width_widget = ui.SpinBox(guiwidth, start=1, end=9999, step=1) self.height_widget = ui.SpinBox(guiheight, start=1, end=9999, step=1) win.add([ui.Label(_('Size')), self.width_widget, ui.Label('⨯'), self.height_widget]) self.linewidth_widget = ui.SpinBox(0.07, start=0.01, end=9.99, step=0.01) win.add([ui.Label(_('Line width')), self.linewidth_widget, ui.Label(_('Ångström'))]) self.constraints_widget = ui.CheckButton(_("Render constraints")) self.cell_widget = ui.CheckButton(_("Render unit cell"), value=True) win.add([self.cell_widget, self.constraints_widget]) formula = gui.atoms.get_chemical_formula(mode='hill') self.basename_widget = ui.Entry(width=30, value=formula, callback=self.update_outputname) win.add([ui.Label(_('Output basename: ')), self.basename_widget]) self.povray_executable = ui.Entry(width=30,value='povray') win.add([ui.Label(_('POVRAY executable')), self.povray_executable]) self.outputname_widget = ui.Label() win.add([ui.Label(_('Output filename: ')), self.outputname_widget]) self.update_outputname() self.texture_widget = ui.ComboBox(labels=self.texture_list, values=self.texture_list) win.add([ui.Label(_('Atomic texture set:')), self.texture_widget]) # complicated texture stuff self.camera_widget = ui.ComboBox(labels=self.cameras, values=self.cameras) self.camera_distance_widget = ui.SpinBox(50.0, -99.0, 99.0, 1.0) win.add([ui.Label(_('Camera type: ')), self.camera_widget]) win.add([ui.Label(_('Camera distance')), self.camera_distance_widget]) # render current frame/all frames self.frames_widget = ui.RadioButtons([_('Render current frame'), _('Render all frames')]) win.add(self.frames_widget) if len(gui.images) == 1: self.frames_widget.buttons[1].widget.configure(state='disabled') self.run_povray_widget = ui.CheckButton(_('Run povray'), True) self.keep_files_widget = ui.CheckButton(_('Keep povray files'), False) self.show_output_widget = ui.CheckButton(_('Show output window'), True) self.transparent = ui.CheckButton(_("Transparent background"), True) win.add(self.transparent) win.add([self.run_povray_widget, self.keep_files_widget, self.show_output_widget]) win.add(ui.Button(_('Render'), self.ok))
def window(): def hello(event=None): print('hello', event) menu = [('Hi', [ui.MenuItem('_Hello', hello, 'Ctrl+H')]), ('Hell_o', [ui.MenuItem('ABC', hello, choices='ABC')])] win = ui.MainWindow('Test', menu=menu) win.add(ui.Label('Hello')) win.add(ui.Button('Hello', hello)) r = ui.Rows([ui.Label(x * 7) for x in 'abcd']) win.add(r) r.add('11111\n2222\n333\n44\n5') def abc(x): print(x, r.rows) cb = ui.ComboBox(['Aa', 'Bb', 'Cc'], callback=abc) win.add(cb) rb = ui.RadioButtons(['A', 'B', 'C'], 'ABC', abc) win.add(rb) b = ui.CheckButton('Hello') def hi(): print(b.value, rb.value, cb.value) del r[2] r.add('-------------') win.add([b, ui.Button('Hi', hi)]) return win
def open(self, button=None, filename=None): from ase.io.formats import all_formats, get_ioformat labels = [_('Automatic')] values = [''] def key(item): return item[1][0] for format, (description, code) in sorted(list(all_formats.items()), key=key): io = get_ioformat(format) if io.read and description != '?': labels.append(_(description)) values.append(format) format = [None] def callback(value): format[0] = value chooser = ui.LoadFileDialog(self.window.win, _('Open ...')) ui.Label(_('Choose parser:')).pack(chooser.top) formats = ui.ComboBox(labels, values, callback) formats.pack(chooser.top) filename = filename or chooser.go() if filename: self.images.read([filename], slice(None), format[0]) self.set_colors() self.set_coordinates(self.images.nimages - 1, focus=True)
def toggle(self, value): self.gui.colormode = value if value == 'jmol' or value == 'neighbors': if hasattr(self, 'mnmx'): "delete the min max fields by creating a new window" del self.mnmx del self.cmaps self.win.close() self.reset(self.gui) text = '' else: scalars = np.ma.array([self.gui.get_color_scalars(i) for i in range(len(self.gui.images))]) mn = np.min(scalars) mx = np.max(scalars) self.gui.colormode_data = None, mn, mx cmaps = ['default', 'old'] try: import pylab as plt cmaps += [m for m in plt.cm.datad if not m.endswith("_r")] except ImportError: pass self.cmaps = [_('cmap:'), ui.ComboBox(cmaps, cmaps, self.update_colormap), _('N:'), ui.SpinBox(26, 0, 100, 1, self.update_colormap)] self.update_colormap('default') try: unit = {'tag': '', 'force': 'eV/Ang', 'velocity': '(eV/amu)^(1/2)', 'charge': '|e|', 'initial charge': '|e|', u'magmom': 'μB'}[value] except KeyError: unit = '' text = '' rng = mx - mn # XXX what are optimal allowed range and steps ? self.mnmx = [_('min:'), ui.SpinBox(mn, mn - 10 * rng, mx + rng, rng / 10., self.change_mnmx), _('max:'), ui.SpinBox(mx, mn - 10 * rng, mx + rng, rng / 10., self.change_mnmx), _(unit)] self.win.close() self.reset(self.gui) self.label.text = text self.radio.value = value self.gui.draw() return text # for testing
def __init__(self, gui): self.gui = gui win = self.win = ui.Window(_('Add atoms')) win.add(_('Specify chemical symbol, formula, or filename.')) def choose_file(): chooser = ui.ASEFileChooser(self.win.win) filename = chooser.go() if filename is None: # No file selected return self.combobox.value = filename # Load the file immediately, so we can warn now in case of error self.readfile(filename, format=chooser.format) if self.gui.images.selected.any(): default = current_selection_string else: default = 'H2' self._filename = None self._atoms_from_file = None from ase.collections import g2 labels = list(sorted(name for name in g2.names if len(g2[name]) > 1)) values = labels combobox = ui.ComboBox(labels, values) win.add([ _('Add:'), combobox, ui.Button(_('File ...'), callback=choose_file) ]) combobox.widget.bind('<Return>', lambda e: self.add()) combobox.value = default self.combobox = combobox spinners = [ ui.SpinBox(0.0, -1e3, 1e3, 0.1, rounding=2, width=3) for __ in range(3) ] win.add([_('Coordinates:')] + spinners) self.spinners = spinners win.add( _('Coordinates are relative to the center of the selection, ' 'if any, else absolute.')) self.picky = ui.CheckButton(_('Check positions'), True) win.add([ui.Button(_('Add'), self.add), self.picky]) self.focus()
def __init__(self, gui): self.gui = gui win = self.win = ui.Window(_('Add atoms')) win.add(_('Specify chemical symbol, formula, or filename.')) def set_molecule(value): self.entry.value = value self.focus() def choose_file(): chooser = ui.ASEFileChooser(self.win.win) filename = chooser.go() if filename is None: # No file selected return self.entry.value = filename # Load the file immediately, so we can warn now in case of error self.readfile(filename, format=chooser.format) self.entry = ui.Entry('', callback=self.add) win.add([ _('Add:'), self.entry, ui.Button(_('File ...'), callback=choose_file) ]) self._filename = None self._atoms_from_file = None from ase.collections import g2 labels = list(sorted(g2.names)) values = labels box = ui.ComboBox(labels, values, callback=set_molecule) win.add([_('Get molecule:'), box]) box.value = 'H2' spinners = [ ui.SpinBox(0.0, -1e3, 1e3, 0.1, rounding=2, width=3) for __ in range(3) ] win.add([_('Coordinates:')] + spinners) self.spinners = spinners win.add( _('Coordinates are relative to the center of the selection, ' 'if any, else absolute.')) self.picky = ui.CheckButton(_('Check positions'), True) win.add([ui.Button(_('Add'), self.add), self.picky]) self.focus()
def __init__(self, gui): self.element = Element('', self.apply) self.structure = ui.ComboBox(structures, structures, self.structure_changed) self.structure_warn = ui.Label('', 'red') self.orthogonal = ui.CheckButton('', True, self.make) self.lattice_a = ui.SpinBox(3.2, 0.0, 10.0, 0.001, self.make) self.retrieve = ui.Button(_('Get from database'), self.structure_changed) self.lattice_c = ui.SpinBox(None, 0.0, 10.0, 0.001, self.make) self.x = ui.SpinBox(1, 1, 30, 1, self.make) self.x_warn = ui.Label('', 'red') self.y = ui.SpinBox(1, 1, 30, 1, self.make) self.y_warn = ui.Label('', 'red') self.z = ui.SpinBox(1, 1, 30, 1, self.make) self.vacuum_check = ui.CheckButton('', False, self.vacuum_checked) self.vacuum = ui.SpinBox(5, 0, 40, 0.01, self.make) self.description = ui.Label('') win = self.win = ui.Window(_('Surface')) win.add(ui.Text(introtext)) win.add(self.element) win.add([_('Structure:'), self.structure, self.structure_warn]) win.add([_('Orthogonal cell:'), self.orthogonal]) win.add([_('Lattice constant:')]) win.add([_('\ta'), self.lattice_a, (u'Å'), self.retrieve]) win.add([_('\tc'), self.lattice_c, (u'Å')]) win.add([_('Size:')]) win.add([_('\tx: '), self.x, _(' unit cells'), self.x_warn]) win.add([_('\ty: '), self.y, _(' unit cells'), self.y_warn]) win.add([_('\tz: '), self.z, _(' unit cells')]) win.add([_('Vacuum: '), self.vacuum_check, self.vacuum, (u'Å')]) win.add(self.description) # TRANSLATORS: This is a title of a window. win.add([ pybutton(_('Creating a surface.'), self.make), ui.Button(_('Apply'), self.apply), ui.Button(_('OK'), self.ok) ]) self.element.grab_focus() self.gui = gui self.atoms = None self.lattice_c.active = False self.vacuum.active = False self.structure_changed()
def __init__(self, gui): self.atoms = None self.no_update = True self.old_structure = 'undefined' win = self.win = ui.Window(_('Nanoparticle')) win.add(ui.Text(introtext)) self.element = Element('', self.apply) lattice_button = ui.Button(_('Get structure'), self.set_structure_data) self.elementinfo = ui.Label(' ') win.add(self.element) win.add(self.elementinfo) win.add(lattice_button) # The structure and lattice constant labels = [] values = [] self.needs_4index = {} self.needs_2lat = {} self.factory = {} for abbrev, name, n4, c, factory in self.structure_data: labels.append(name) values.append(abbrev) self.needs_4index[abbrev] = n4 self.needs_2lat[abbrev] = c self.factory[abbrev] = factory self.structure = ui.ComboBox(labels, values, self.update_structure) win.add([_('Structure:'), self.structure]) self.fourindex = self.needs_4index[values[0]] self.a = ui.SpinBox(3.0, 0.0, 1000.0, 0.01, self.update) self.c = ui.SpinBox(3.0, 0.0, 1000.0, 0.01, self.update) win.add([_('Lattice constant: a ='), self.a, ' c =', self.c]) # Choose specification method self.method = ui.ComboBox( [_('Layer specification'), _('Wulff construction')], ['layers', 'wulff'], self.update_gui_method) win.add([_('Method: '), self.method]) self.layerlabel = ui.Label('Missing text') # Filled in later win.add(self.layerlabel) self.direction_table_rows = ui.Rows() win.add(self.direction_table_rows) self.default_direction_table() win.add(_('Add new direction:')) self.new_direction_and_size_rows = ui.Rows() win.add(self.new_direction_and_size_rows) self.update_new_direction_and_size_stuff() # Information win.add(_('Information about the created cluster:')) self.info = [ _('Number of atoms: '), ui.Label('-'), _(' Approx. diameter: '), ui.Label('-') ] win.add(self.info) # Finalize setup self.update_structure('fcc') self.update_gui_method() self.no_update = False self.auto = ui.CheckButton(_('Automatic Apply')) win.add(self.auto) win.add([ pybutton(_('Creating a nanoparticle.'), self.makeatoms), ui.helpbutton(helptext), ui.Button(_('Apply'), self.apply), ui.Button(_('OK'), self.ok) ]) self.gui = gui self.smaller_button = None self.largeer_button = None self.element.grab_focus()