-
Notifications
You must be signed in to change notification settings - Fork 0
/
calculator.py
88 lines (66 loc) · 2.88 KB
/
calculator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.config import Config
Config.set("graphics", "resizeble", 0)
Config.set("graphics", "width", 400)
Config.set("graphics", "height", 500)
class MainApp(App):
def update_label(self):
self.lbl.text = self.formula
def add_number(self, instance):
if self.formula == "0":
self.formula = ""
self.formula += str(instance.text)
self.update_label()
def add_op(self, instance):
if str(instance.text).lower() == "x":
self.formula += "*"
elif str(instance.text) == "÷":
self.formula += "/"
else:
self.formula += str(instance.text)
print(instance)
self.update_label()
def eval_operation(self, instance):
try:
self.lbl.text = str(eval(self.lbl.text))
except SyntaxError:
print("Error while evaluating!")
self.formula = self.lbl.text
def clear(self, instance):
self.lbl.text = "0"
self.formula = ""
def build(self):
self.formula = "0"
bl = BoxLayout(orientation = "vertical")
gl = GridLayout(cols = 4, spacing = 3, size_hint = (1, .6), padding = 10)
self.lbl = Label(text="0", font_size = 40, size_hint = (1, .35), text_size= (400-50, 500 * .4 - 50), halign="right", valign="center")
bl.add_widget(self.lbl)
gl.add_widget( Button(text="C", on_press=self.clear) )
gl.add_widget( Button() )
gl.add_widget( Button() )
gl.add_widget( Button(text="÷", on_press = self.add_op) )
gl.add_widget( Button(text="7", on_press=self.add_number) )
gl.add_widget( Button(text="8", on_press=self.add_number) )
gl.add_widget( Button(text="9", on_press=self.add_number) )
gl.add_widget( Button(text="X", on_press=self.add_op) )
gl.add_widget( Button(text="5", on_press=self.add_number) )
gl.add_widget( Button(text="6", on_press=self.add_number) )
gl.add_widget( Button(text="7", on_press=self.add_number) )
gl.add_widget( Button(text="-", on_press=self.add_op) )
gl.add_widget( Button(text="1", on_press=self.add_number) )
gl.add_widget( Button(text="2", on_press=self.add_number) )
gl.add_widget( Button(text="3", on_press=self.add_number) )
gl.add_widget( Button(text="+", on_press=self.add_op ) )
gl.add_widget( Widget() )
gl.add_widget( Button(text="0", on_press=self.add_number) )
gl.add_widget( Button(text=".", on_press=self.add_number) )
gl.add_widget( Button(text="=", on_press=self.eval_operation) )
bl.add_widget( gl )
return bl
if __name__ == "__main__":
MainApp().run()