root / ase / gui / setupwindow.py @ 13
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)
|