root / ase / gui / pybutton.py @ 16
Historique | Voir | Annoter | Télécharger (2,3 ko)
1 | 1 | tkerber | |
---|---|---|---|
2 | 1 | tkerber | """pybutton.py - a button for displaying Python code.
|
3 | 1 | tkerber |
|
4 | 1 | tkerber | This module defines two classes, together they implement a button that
|
5 | 1 | tkerber | a module can use to display Python.
|
6 | 1 | tkerber |
|
7 | 1 | tkerber | PyButton
|
8 | 1 | tkerber | --------
|
9 | 1 | tkerber |
|
10 | 1 | tkerber | PyButton is a gkt.Button with the label 'Python'. When pressed, it
|
11 | 1 | tkerber | opens a PyWindow displaying some Python code, or an error message if
|
12 | 1 | tkerber | no Python code is ready.
|
13 | 1 | tkerber |
|
14 | 1 | tkerber | The script is stored in the attribute .python, it is the
|
15 | 1 | tkerber | responsability of the owning object to keep this attribute up to date:
|
16 | 1 | tkerber | when pressing the Apply button would result in a sensible
|
17 | 1 | tkerber | configuration being created, the python attribute must be set to a
|
18 | 1 | tkerber | string creating this code. When pressing Apply would cause an error,
|
19 | 1 | tkerber | the python attribute must be set to None.
|
20 | 1 | tkerber |
|
21 | 1 | tkerber | PyWindow
|
22 | 1 | tkerber | --------
|
23 | 1 | tkerber |
|
24 | 1 | tkerber | Displays the Python code. This object is created by the PyButton
|
25 | 1 | tkerber | object when needed.
|
26 | 1 | tkerber | """
|
27 | 1 | tkerber | |
28 | 1 | tkerber | import gtk |
29 | 1 | tkerber | import time |
30 | 1 | tkerber | from ase.gui.widgets import oops, pack |
31 | 1 | tkerber | |
32 | 1 | tkerber | |
33 | 1 | tkerber | class PyButton(gtk.Button): |
34 | 1 | tkerber | "A button for displaying Python code."
|
35 | 1 | tkerber | def __init__(self, title): |
36 | 1 | tkerber | gtk.Button.__init__(self, "Python") |
37 | 1 | tkerber | self.title = title
|
38 | 1 | tkerber | self.python = None |
39 | 1 | tkerber | self.connect_after('clicked', self.run) |
40 | 1 | tkerber | |
41 | 1 | tkerber | def run(self, *args): |
42 | 1 | tkerber | "The method called when the button is click."
|
43 | 1 | tkerber | if self.python: |
44 | 1 | tkerber | now = time.ctime() |
45 | 1 | tkerber | win = PyWindow(self.title, now, self.python) |
46 | 1 | tkerber | else:
|
47 | 1 | tkerber | oops("No Python code",
|
48 | 1 | tkerber | "You have not (yet) specified a consistent set of parameters.")
|
49 | 1 | tkerber | |
50 | 1 | tkerber | fr1_template = """
|
51 | 1 | tkerber | Title: %s
|
52 | 1 | tkerber | Time: %s
|
53 | 1 | tkerber | """
|
54 | 1 | tkerber | |
55 | 1 | tkerber | class PyWindow(gtk.Window): |
56 | 1 | tkerber | "A window displaying Python code."
|
57 | 1 | tkerber | def __init__(self, title, time, code): |
58 | 1 | tkerber | gtk.Window.__init__(self)
|
59 | 1 | tkerber | self.set_title("ag: Python code") |
60 | 1 | tkerber | vbox = gtk.VBox() |
61 | 1 | tkerber | lbl = gtk.Label(fr1_template % (title, time)) |
62 | 1 | tkerber | lbl.set_alignment(0.0, 0.5) |
63 | 1 | tkerber | fr = gtk.Frame("Information:")
|
64 | 1 | tkerber | fr.add(lbl) |
65 | 1 | tkerber | pack(vbox, fr) |
66 | 1 | tkerber | txtbuf = gtk.TextBuffer() |
67 | 1 | tkerber | txtbuf.set_text(code) |
68 | 1 | tkerber | txtview = gtk.TextView(txtbuf) |
69 | 1 | tkerber | txtview.set_editable(False)
|
70 | 1 | tkerber | fr = gtk.Frame("Python code:")
|
71 | 1 | tkerber | fr.add(txtview) |
72 | 1 | tkerber | fr.set_label_align(0.0, 0.5) |
73 | 1 | tkerber | pack(vbox, fr) |
74 | 1 | tkerber | but = gtk.Button(stock=gtk.STOCK_OK) |
75 | 1 | tkerber | but.connect('clicked', lambda x: self.destroy()) |
76 | 1 | tkerber | pack(vbox, [but], end=True, bottom=True) |
77 | 1 | tkerber | self.add(vbox)
|
78 | 1 | tkerber | self.show_all()
|