-
Notifications
You must be signed in to change notification settings - Fork 72
/
quick_sum_app.py
63 lines (50 loc) · 1.85 KB
/
quick_sum_app.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
# This Python file uses the following encoding: utf-8
"""
QuickSum - a fast way to add up, with busy teachers in mind...
Original version: iOS app 2005
Ported to Kivy: Oct 2015
(c) 2015 Jason Holdsworth
"""
from math import modf
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.properties import NumericProperty
__author__ = 'Jason'
class QuickSum(App):
current_total = NumericProperty(0)
NORMAL_DIGITS = ['3', '2', '1', '6', '5', '4', '9', '8', '7']
MORE_DIGITS = ['13', '14', '15', '10', '11', '12', '½', '¼', '¾']
FRACTIONS = {'½': 0.5, '¼': 0.25, '¾': 0.75}
def __init__(self, **kwargs):
super(QuickSum, self).__init__(**kwargs)
self._digits_toggled = False
def build(self):
Window.size = 300, 600
self.title = "QuickSum"
self.root = Builder.load_file('quick_sum_gui.kv')
self._set_digits(QuickSum.NORMAL_DIGITS)
return self.root
def _increment_total(self, source):
# use the text of the button to figure out the
# value to add to the current total
digit = source.text
if digit in QuickSum.FRACTIONS.keys():
value = QuickSum.FRACTIONS[digit]
self._toggle_digits()
else:
value = int(digit)
result = self.current_total + value
if modf(result)[0] == 0:
self.current_total = int(result)
else:
self.current_total = result
def _clear_total(self):
self.current_total = 0
def _toggle_digits(self):
self._digits_toggled = not self._digits_toggled
self._set_digits(QuickSum.MORE_DIGITS if self._digits_toggled else QuickSum.NORMAL_DIGITS)
def _set_digits(self, digits):
for i in range(9):
self.root.ids.digits.children[i].text = str(digits[i])
QuickSum().run()