Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # basic kalkulator keyboard
- # joe
- class Modul:
- def __init__(self):
- import appuifw
- import graphics
- self.A, self.G = appuifw, graphics
- self.X, self.Y = self.G.sysinfo.display_pixels()
- self.cX, self.cY = self.X/2.0, self.Y/2.0
- self.img = self.G.Image.new((self.X, self.Y))
- m = Modul()
- del Modul
- class Kalkulator:
- def __init__(self):
- self.main_loop = False
- self.scr_text = u''
- self.result = None
- self.isMin = False
- self.buffer = []
- self.canvas = m.A.Canvas(redraw_callback=self._draw, event_callback=self._event)
- m.A.app.screen = 'full'
- m.A.app.body = self.canvas
- m.A.app.menu = [(u'Exit', self.keluar)]
- m.A.app.exit_key_handler = lambda:self.clr(0)
- def keluar(self):
- m.A.app.set_exit()
- def screen(self):
- m.img.clear(bgcolor)
- def _draw(self, rect):
- if m.img:
- self.canvas.blit(m.img)
- def clr(self, all=0):
- if not all:
- # hapus
- if self.buffer:
- self.result = None
- self.buffer.pop(-1)
- else:return None
- if not self.buffer:
- self.isMin = False
- self.scr_text = ''.join([str(i) for i in self.buffer])
- else:
- # hapus semua
- self.buffer, self.scr_text, self.result, self.isMin = [], '', None, False
- def _refresh(self):
- ''' bersihkan layar / hasil hitung '''
- self.result = None
- def _hitung(self):
- ''' hitung disini '''
- pass
- def _event(self, sc):
- key = sc['scancode']
- if self.main_loop:
- if sc['type'] is not m.A.EEventKey:return None
- elif key == 0x30: #0
- self._refresh()
- self._drawNum(0)
- elif key == 0x31: #1
- self._refresh()
- self._drawNum(1)
- elif key == 0x32: #2
- self._refresh()
- self._drawNum(2)
- elif key == 0x33: #3
- self._refresh()
- self._drawNum(3)
- elif key == 0x34: #4
- self._refresh()
- self._drawNum(4)
- elif key == 0x35: #5
- self._refresh()
- self._drawNum(5)
- elif key == 0x36: #6
- self._refresh()
- self._drawNum(6)
- elif key == 0x37: #7
- self._refresh()
- self._drawNum(7)
- elif key == 0x38: #8
- self._refresh()
- self._drawNum(8)
- elif key == 0x39: #9
- self._refresh()
- self._drawNum(9)
- elif key == 0x12: # pen
- if not self.isMin:
- if self.result:self.result = None
- self.isMin = True
- self.buffer = ['-'] + self.buffer
- self.scr_text= ''.join([str(i) for i in self.buffer])
- else:
- if self.result:self.result = None
- if self.isMin:
- if self.buffer:
- if self.buffer[0] == '-':
- self.buffer.pop(0)
- else:return None
- self.scr_text= ''.join([str(i) for i in self.buffer])
- self.isMin = False
- elif key == 0x2a: # *
- if self.buffer > 1:
- if '.' in self.buffer:
- # hanya ada 1 koma dalam deret angka, jika sudah ada, lanjutkan..
- return None
- else:
- self._refresh()
- self._drawNum('.')
- elif key == 0x01: # C
- self.clr(1)
- elif key == 0x7f: # #
- self._hitung()
- def _tsize(self, text, font):
- if not isinstance(text, unicode):
- text = unicode(text)
- (a, b, c) = m.img.measure_text(text, font=font)
- w, h = (a[2] - a[0], a[3] - a[1])
- return (w, h)
- def _drawNum(self, num):
- if num != None:
- if len(self.buffer) < 12:
- self.buffer.append(num)
- else:return None
- self.scr_text = ''.join([str(i) for i in self.buffer])
- if self.scr_text[0] == '.':
- # jika teks pertama yg ditekan '.' tambahkan 0 didepan nya menjadi 0. ...
- self.buffer = [0] + self.buffer
- self.scr_text = '0' + self.scr_text
- def drawText(self, tlist, color, font):
- h = self._tsize(u'AB', font)[1] + 2
- for i in range(len(tlist)):
- m.img.text((m.cX - self._tsize(tlist[i], font)[0] / 2, m.cY - ((h * len(tlist)) / 3) + (i * h)), tlist[i], color, font)
- def drawResult(self):
- pass
- def Main(self):
- self.main_loop = True
- boxH=60
- while self.main_loop:
- px, py = m.X - self._tsize(unicode(self.scr_text),numberfont)[0] - 5, boxH-14
- self.screen()
- m.img.polygon((4,2,m.X-4,2,m.X-2,4,m.X-2,boxH-2,m.X-4,boxH,4,boxH,2,boxH-2,2,4),0x696969,0xefefef)
- m.img.text((px, py), unicode(self.scr_text), textcolor, numberfont)
- if self.result != None:
- self.drawResult()
- if not self.buffer and not self.scr_text:
- text_main = [u'Program ready...']
- self._draw(0)
- m.A.e32.ao_sleep(1e-04)
- bgcolor = 0x2021
- textcolor = 0
- box_bgcolor = 0xa5fb5a
- box_textcolor = 0
- box_bordercolor = 0xffffff
- bordercolor = 0xffffff
- numberfont = u'acalc21'
- normalfont = 'legend'
- smallfont = 'dense'
- Kal=Kalkulator()
- Kal.Main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement