Statistiques
| Révision :

root / ase / gui / setupwindow.py @ 3

Historique | Voir | Annoter | Télécharger (2,05 ko)

1 1 tkerber
# encoding: utf-8
2 1 tkerber
"""setupwindow.py - Window base class for setup modules.
3 1 tkerber
"""
4 1 tkerber
5 1 tkerber
import gtk
6 1 tkerber
from ase.gui.widgets import pack, cancel_apply_ok, oops
7 1 tkerber
import ase
8 1 tkerber
9 1 tkerber
class SetupWindow(gtk.Window):
10 1 tkerber
    "Base class for ase.gui setup windows."
11 1 tkerber
    # __init__ inherited from gtk.Window
12 1 tkerber
13 1 tkerber
    def packtext(self, vbox, text, label=None):
14 1 tkerber
        "Pack an text frame into the window."
15 1 tkerber
        pack(vbox, gtk.Label(""))
16 1 tkerber
        txtframe = gtk.Frame(label)
17 1 tkerber
        txtlbl = gtk.Label(text)
18 1 tkerber
        txtframe.add(txtlbl)
19 1 tkerber
        txtlbl.show()
20 1 tkerber
        pack(vbox, txtframe)
21 1 tkerber
        pack(vbox, gtk.Label(""))
22 1 tkerber
23 1 tkerber
    def update_element(self, *args):
24 1 tkerber
        "Called when a new element may have been entered."
25 1 tkerber
        # Assumes the element widget is self.element and that a label
26 1 tkerber
        # to keep updated is self.elementinfo.  The chemical symbol is
27 1 tkerber
        # placed in self.legalelement - or None if the element is
28 1 tkerber
        # invalid.
29 1 tkerber
        elem = self.element.get_text()
30 1 tkerber
        if not elem:
31 1 tkerber
            self.invalid_element("  No element specified!")
32 1 tkerber
            return False
33 1 tkerber
        try:
34 1 tkerber
            z = int(elem)
35 1 tkerber
        except ValueError:
36 1 tkerber
            # Probably a symbol
37 1 tkerber
            try:
38 1 tkerber
                z = ase.data.atomic_numbers[elem]
39 1 tkerber
            except KeyError:
40 1 tkerber
                self.invalid_element()
41 1 tkerber
                return False
42 1 tkerber
        try:
43 1 tkerber
            symb = ase.data.chemical_symbols[z]
44 1 tkerber
        except KeyError:
45 1 tkerber
            self.invalid_element()
46 1 tkerber
            return False
47 1 tkerber
        name = ase.data.atomic_names[z]
48 1 tkerber
        ref = ase.data.reference_states[z]
49 1 tkerber
        if ref is None:
50 1 tkerber
            struct = "No crystal structure data"
51 1 tkerber
        else:
52 1 tkerber
            struct = ref['symmetry'].lower()
53 1 tkerber
            if struct == 'fcc' or struct == 'bcc':
54 1 tkerber
                struct = "%s (a=%.3f Å)" % (struct, ref['a'])
55 1 tkerber
56 1 tkerber
        txt = "  %s: %s, Z=%i, %s" % (name, symb, z, struct)
57 1 tkerber
        self.elementinfo.set_text(txt)
58 1 tkerber
        self.legal_element = symb
59 1 tkerber
        return True
60 1 tkerber
61 1 tkerber
    def invalid_element(self, txt="  ERROR: Invalid element!"):
62 1 tkerber
        self.legal_element = False
63 1 tkerber
        self.elementinfo.set_text(txt)