~alza/proyek-uvt/kalkuluvtsains

« back to all changes in this revision

Viewing changes to kalkuluvtsains.py

  • Committer: Raviyanto Ahmad
  • Date: 2013-06-04 09:39:25 UTC
  • Revision ID: git-v1:18443c9c3d5015cd7517da6b02dac3c35b28f06d
komit pertama

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
#
 
3
# -*- coding: utf-8 -*-
 
4
 
5
# kalkuluvtsains.py
 
6
#
 
7
# Copyright 2013 Universitas Virtual Terbuka
 
8
#
 
9
# Referensi program:
 
10
# 1. http://code.google.com/p/calculator-using-pygtk
 
11
# 2. http://code.google.com/p/calculator-python-glade
 
12
# 3. http://zetcode.com/gui/pygtk/layout
 
13
# 4. http://www.vrsets.com/index.php?topic=25484.0
 
14
 
15
# Program ini buat pembelajaran di Universitas Virtual Terbuka
 
16
 
 
17
try:
 
18
    import pygtk
 
19
    pygtk.require("2.0")
 
20
except:
 
21
    pass
 
22
try:
 
23
    import gtk, sys
 
24
except:
 
25
    print("GTK Not Available")
 
26
    sys.exit(1)
 
27
 
 
28
from math import *
 
29
 
 
30
license = """Kalkulator Saintifik UVT is free software; you can redistribute it 
 
31
and/or modify it under the terms of the GNU General Public License(GPL v3) 
 
32
as published by the Free Software Foundation.
 
33
 
 
34
Kalkulator Saintifik UVT is distributed in the hope that it will be useful,
 
35
but WITHOUT ANY WARRANTY; without even the implied warranty of
 
36
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
37
GNU General Public License for more details.
 
38
 
 
39
You should have received a copy of the GNU General Public License
 
40
along with Kalkulator Saintifik UVT; if not, write to the Free Software
 
41
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 
42
MA 02110-1301, USA."""
 
43
 
 
44
authors = ["Raviyanto Ahmad <raviyanto@gmail.com>", "Rajeswari Seetharaman <sraji.me@gmail.com>", 
 
45
           "Jan Bodnar <vronskij@gmail.com>"]
 
46
 
 
47
class Kalkulator:
 
48
    def __init__(self):
 
49
        self.jendela = gtk.Window(gtk.WINDOW_TOPLEVEL)
 
50
        self.jendela.set_size_request(250, 365)
 
51
        self.jendela.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color("#8A0886"))
 
52
        self.jendela.set_resizable(True)
 
53
        self.jendela.set_position(gtk.WIN_POS_CENTER)
 
54
        self.jendela.set_border_width(5)
 
55
        self.jendela.set_title("Kalkulator Saintifik UVT")
 
56
        
 
57
        try:
 
58
            self.jendela.set_icon_from_file("/usr/share/kalkuluvtsains/gambar/kalkulatorsains.png")
 
59
        except Exception, e:
 
60
            print e.message
 
61
          
 
62
        self.tombol()
 
63
        self.menu()
 
64
        self.tabel()
 
65
        self.masukan()
 
66
        self.kotak()
 
67
        self.konek()
 
68
        self.jendela.show_all()
 
69
 
 
70
    def tombol(self):
 
71
        self.tombol_hapus = gtk.Button("CE")
 
72
        self.tombol_kurung_buka = gtk.Button("(")
 
73
        self.tombol_kurung_tutup = gtk.Button(")")
 
74
        self.tombol_tutup = gtk.Button("Tutup")
 
75
        
 
76
        self.tombol_tujuh = gtk.Button("7")
 
77
        self.tombol_delapan = gtk.Button("8")
 
78
        self.tombol_sembilan = gtk.Button("9")
 
79
        self.tombol_bagi = gtk.Button("/")
 
80
        
 
81
        self.tombol_empat = gtk.Button("4")
 
82
        self.tombol_lima = gtk.Button("5")
 
83
        self.tombol_enam = gtk.Button("6")
 
84
        self.tombol_kali = gtk.Button("*")
 
85
    
 
86
        self.tombol_satu = gtk.Button("1")
 
87
        self.tombol_dua = gtk.Button("2")
 
88
        self.tombol_tiga = gtk.Button("3")
 
89
        self.tombol_kurang = gtk.Button("-")
 
90
 
 
91
        self.tombol_nol = gtk.Button("0")
 
92
        self.tombol_titik = gtk.Button(".")
 
93
        self.tombol_sama_dengan = gtk.Button("=")
 
94
        self.tombol_tambah = gtk.Button("+")
 
95
 
 
96
        self.tombol_radians = gtk.Button("radians")
 
97
        self.tombol_e = gtk.Button("e")
 
98
        self.tombol_log = gtk.Button("log")
 
99
        self.tombol_log10 = gtk.Button("log10")
 
100
 
 
101
        self.tombol_degrees = gtk.Button("degrees")
 
102
        self.tombol_pi = gtk.Button("pi")
 
103
        self.tombol_sinh = gtk.Button("sinh")
 
104
        self.tombol_cosh = gtk.Button("cosh")
 
105
 
 
106
        self.tombol_tanh = gtk.Button("tanh")
 
107
        self.tombol_sqrt = gtk.Button("sqrt")
 
108
        self.tombol_asin = gtk.Button("asin")
 
109
        self.tombol_acos = gtk.Button("acos")
 
110
 
 
111
        self.tombol_atan = gtk.Button("atan")
 
112
        self.tombol_sin = gtk.Button("sin")
 
113
        self.tombol_cos = gtk.Button("cos")
 
114
        self.tombol_tan = gtk.Button("tan")
 
115
 
 
116
    def menu(self):
 
117
        self.papan_menu = gtk.MenuBar()
 
118
        
 
119
        self.pilihan = gtk.Menu()
 
120
 
 
121
        self.tentang = gtk.Menu()
 
122
 
 
123
        self.keluar = gtk.MenuItem("Keluar")
 
124
        
 
125
        self.pilihan.append(self.keluar)
 
126
 
 
127
        self.keterangan = gtk.MenuItem("Keterangan")
 
128
 
 
129
        self.tentang.append(self.keterangan)
 
130
 
 
131
        self.pokok_pilihan = gtk.MenuItem("Berkas")
 
132
 
 
133
        self.pokok_tentang = gtk.MenuItem("Ihwal")
 
134
 
 
135
        self.pokok_pilihan.set_submenu(self.pilihan)
 
136
 
 
137
        self.pokok_tentang.set_submenu(self.tentang)
 
138
 
 
139
        self.papan_menu.append(self.pokok_pilihan)
 
140
 
 
141
        self.papan_menu.append(self.pokok_tentang) 
 
142
 
 
143
    def masukan(self):
 
144
        self.masukan_data = gtk.Entry()
 
145
        self.x = self.masukan_data.get_text()
 
146
 
 
147
    def tabel(self):
 
148
        self.tabel_kalkulator = gtk.Table(rows = 9, columns = 4, homogeneous = True)
 
149
        self.tabel_kalkulator.attach(self.tombol_hapus, 0, 1, 0, 1)
 
150
        self.tabel_kalkulator.attach(self.tombol_kurung_buka, 1, 2, 0, 1)
 
151
        self.tabel_kalkulator.attach(self.tombol_kurung_tutup, 2, 3, 0, 1)
 
152
        self.tabel_kalkulator.attach(self.tombol_tutup, 3, 4, 0, 1)
 
153
 
 
154
        self.tabel_kalkulator.attach(self.tombol_tujuh, 0, 1, 1, 2)
 
155
        self.tabel_kalkulator.attach(self.tombol_delapan, 1, 2, 1, 2)
 
156
        self.tabel_kalkulator.attach(self.tombol_sembilan, 2, 3, 1, 2)
 
157
        self.tabel_kalkulator.attach(self.tombol_bagi, 3, 4, 1, 2)
 
158
 
 
159
        self.tabel_kalkulator.attach(self.tombol_empat, 0, 1, 2, 3)
 
160
        self.tabel_kalkulator.attach(self.tombol_lima, 1, 2, 2, 3)
 
161
        self.tabel_kalkulator.attach(self.tombol_enam, 2, 3, 2, 3)
 
162
        self.tabel_kalkulator.attach(self.tombol_kali, 3, 4, 2, 3)
 
163
 
 
164
        self.tabel_kalkulator.attach(self.tombol_satu, 0, 1, 3, 4)
 
165
        self.tabel_kalkulator.attach(self.tombol_dua, 1, 2, 3, 4)
 
166
        self.tabel_kalkulator.attach(self.tombol_tiga, 2, 3, 3, 4)
 
167
        self.tabel_kalkulator.attach(self.tombol_kurang, 3, 4, 3, 4)
 
168
 
 
169
        self.tabel_kalkulator.attach(self.tombol_nol, 0, 1, 4, 5)
 
170
        self.tabel_kalkulator.attach(self.tombol_titik, 1, 2, 4, 5)
 
171
        self.tabel_kalkulator.attach(self.tombol_sama_dengan, 2, 3, 4, 5)
 
172
        self.tabel_kalkulator.attach(self.tombol_tambah, 3, 4, 4, 5)
 
173
 
 
174
        self.tabel_kalkulator.attach(self.tombol_radians, 0, 1, 5, 6)
 
175
        self.tabel_kalkulator.attach(self.tombol_e, 1, 2, 5, 6)
 
176
        self.tabel_kalkulator.attach(self.tombol_log, 2, 3, 5, 6)
 
177
        self.tabel_kalkulator.attach(self.tombol_log10, 3, 4, 5, 6)
 
178
 
 
179
        self.tabel_kalkulator.attach(self.tombol_degrees, 0, 1, 6, 7)
 
180
        self.tabel_kalkulator.attach(self.tombol_pi, 1, 2, 6, 7)
 
181
        self.tabel_kalkulator.attach(self.tombol_sinh, 2, 3, 6, 7)
 
182
        self.tabel_kalkulator.attach(self.tombol_cosh, 3, 4, 6, 7)
 
183
 
 
184
        self.tabel_kalkulator.attach(self.tombol_tanh, 0, 1, 7, 8)
 
185
        self.tabel_kalkulator.attach(self.tombol_sqrt, 1, 2, 7, 8)
 
186
        self.tabel_kalkulator.attach(self.tombol_asin, 2, 3, 7, 8)
 
187
        self.tabel_kalkulator.attach(self.tombol_acos, 3, 4, 7, 8)
 
188
        
 
189
        self.tabel_kalkulator.attach(self.tombol_atan, 0, 1, 8, 9)
 
190
        self.tabel_kalkulator.attach(self.tombol_sin, 1, 2, 8, 9)
 
191
        self.tabel_kalkulator.attach(self.tombol_cos, 2, 3, 8, 9)
 
192
        self.tabel_kalkulator.attach(self.tombol_tan, 3, 4, 8, 9)        
 
193
 
 
194
    def kotak(self):
 
195
        self.kotak_vertikal = gtk.VBox(spacing = 20)
 
196
        
 
197
        self.kotak_horizontal_1 = gtk.HBox(spacing = 10)
 
198
        self.kotak_horizontal_1.pack_start(self.papan_menu)
 
199
        
 
200
        self.kotak_horizontal_2 = gtk.HBox(spacing = 10)
 
201
        self.kotak_horizontal_2.pack_start(self.masukan_data)
 
202
 
 
203
        self.kotak_horizontal_3 = gtk.HBox(spacing = 10)
 
204
        self.kotak_horizontal_3.pack_start(self.tabel_kalkulator)
 
205
 
 
206
        self.kotak_vertikal.pack_start(self.kotak_horizontal_1)
 
207
        self.kotak_vertikal.pack_start(self.kotak_horizontal_2)
 
208
        self.kotak_vertikal.pack_start(self.kotak_horizontal_3)
 
209
 
 
210
        self.jendela.add(self.kotak_vertikal)
 
211
 
 
212
    def konek(self):
 
213
        self.keluar.connect("activate", gtk.main_quit)
 
214
        self.keterangan.connect("activate", self.ihwal)
 
215
        
 
216
        self.tombol_tutup.connect("clicked", self.panggilan_keluar)
 
217
        self.jendela.connect("destroy", self.panggilan_keluar)
 
218
        
 
219
        self.tombol_satu.connect("clicked", self.klik, "1")    
 
220
        self.tombol_dua.connect("clicked", self.klik, "2")
 
221
        self.tombol_tiga.connect("clicked", self.klik, "3")
 
222
        self.tombol_empat.connect("clicked", self.klik, "4")
 
223
        self.tombol_lima.connect("clicked", self.klik, "5")
 
224
 
 
225
        self.tombol_enam.connect("clicked", self.klik, "6")
 
226
        self.tombol_tujuh.connect("clicked", self.klik, "7")
 
227
        self.tombol_delapan.connect("clicked", self.klik, "8")
 
228
        self.tombol_sembilan.connect("clicked", self.klik, "9")
 
229
        self.tombol_nol.connect("clicked", self.klik, "0")
 
230
        self.tombol_titik.connect("clicked", self.klik, ".")
 
231
        
 
232
        self.tombol_kurung_tutup.connect("clicked", self.klik, ")")
 
233
        self.tombol_kurung_buka.connect("clicked", self.klik, "(")
 
234
 
 
235
        self.tombol_hapus.connect("clicked", self.klik, "CE")
 
236
        self.tombol_sama_dengan.connect("clicked", self.klik, "=")
 
237
 
 
238
        self.tombol_kali.connect("clicked", self.klik, "*")
 
239
        self.tombol_bagi.connect("clicked", self.klik, "/")
 
240
        self.tombol_tambah.connect("clicked", self.klik, "+")
 
241
        self.tombol_kurang.connect("clicked", self.klik, "-")
 
242
 
 
243
        self.tombol_sin.connect("clicked", self.klik, "sin(")
 
244
        self.tombol_cos.connect("clicked", self.klik, "cos(")
 
245
        self.tombol_tan.connect("clicked", self.klik, "tan(")
 
246
        self.tombol_atan.connect("clicked", self.klik, "atan(")
 
247
 
 
248
        self.tombol_tanh.connect("clicked", self.klik, "tanh(")
 
249
        self.tombol_sqrt.connect("clicked", self.klik, "sqrt(") 
 
250
        self.tombol_asin.connect("clicked", self.klik, "asin(") 
 
251
        self.tombol_acos.connect("clicked", self.klik, "acos(")
 
252
 
 
253
        self.tombol_degrees.connect("clicked", self.klik, "degrees(")
 
254
        self.tombol_pi.connect("clicked", self.klik, "pi")
 
255
        self.tombol_sinh.connect("clicked", self.klik, "sinh(")
 
256
        self.tombol_cosh.connect("clicked", self.klik, "cosh(")
 
257
 
 
258
        self.tombol_radians.connect("clicked", self.klik,"radians(")
 
259
        self.tombol_e.connect("clicked", self.klik,"e")
 
260
        self.tombol_log.connect("clicked", self.klik, "log(")
 
261
        self.tombol_log10.connect("clicked", self.klik, "log10(")
 
262
 
 
263
    def klik(self, a, b):
 
264
        if b == "=":
 
265
            self.tanda = False
 
266
            x = "self.x=" + self.masukan_data.get_text()
 
267
            exec(x)
 
268
        elif b == "CE":
 
269
            self.masukan_data.set_text("")
 
270
            self.tanda = False
 
271
            self.hapus = True
 
272
            self.x = None
 
273
        else:
 
274
            self.tanda = True
 
275
            self.hapus = False
 
276
            
 
277
        if self.tanda:
 
278
            if not self.x:
 
279
                self.x = b
 
280
            else:
 
281
                self.x = self.x + b
 
282
                
 
283
        if not self.hapus:
 
284
            self.masukan_data.set_text(str(self.x))
 
285
            self.x == None
 
286
 
 
287
        if b == "=":
 
288
            self.x = self.masukan_data.get_text()
 
289
      
 
290
    def ihwal(self, a):
 
291
        self.tentang = gtk.AboutDialog()
 
292
        self.tentang.set_program_name("Kalkulator UVT")
 
293
        self.tentang.set_version("0.1")
 
294
        self.tentang.set_license(license)
 
295
        self.tentang.set_copyright("(c) 2013 UVT")
 
296
        self.tentang.set_authors(authors)
 
297
        self.tentang.set_comments("Kalkulator Saintifik")
 
298
        self.tentang.set_website("http://uvt.web.id")
 
299
        self.tentang.set_logo(gtk.gdk.pixbuf_new_from_file("/usr/share/kalkuluvtsains/gambar/kalkulatorsains.png"))
 
300
        self.tentang.run()
 
301
        self.tentang.destroy()
 
302
 
 
303
    def panggilan_keluar(self, a):
 
304
        gtk.main_quit()
 
305
 
 
306
if __name__ == "__main__":
 
307
    Kalkulator()
 
308
    gtk.main()