Advertisement
Guest User

Calcolatrice in Python

a guest
Aug 19th, 2015
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.75 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #-------------------------------Python----------------------calcola.py--#
  3. #                                                                       #
  4. #                            Calcolatrice                               #
  5. #                                                                       #
  6. #---Daniele Zambelli---------------------------------------------2003---#
  7.  
  8. from Tkinter import *
  9. from math import *
  10.          
  11. class Calcolatrice:
  12.  
  13.   def __init__(self, master):
  14.     self.max=14
  15.     self.dec=0
  16.     self.v=StringVar();     self.v.set('0')
  17.     self.x=DoubleVar();     self.x.set(0)
  18.     self.y=DoubleVar();     self.y.set(0)
  19.     self.m=DoubleVar();     self.m.set(0)
  20.     self.stato=StringVar(); self.stato.set('=')
  21.     self.op=StringVar();    self.op.set('')
  22.     self.disegna(master)
  23.    
  24.   def disegna(self, master):
  25.     visu=[[('M:', 'maroon', self.m, 19, 3)],
  26.           [('Y:', 'orange', self.y, 19, 3)],
  27.           [('X:', 'orange', self.x, 19, 3)],
  28.           [('st:', 'blue', self.stato, 2, 1),
  29.            ('op:', 'blue', self.op, 2, 1)],
  30.           [('V:', '#5C4033', self.v, 19, 3)]]
  31.     self.dvisu(master, visu, 0, 0)
  32.     tasti=[[None, None,
  33.             ('CE','red',self.canc),('CA','red',self.canc)],
  34.            [('M+','green',self.mem),('M-','green',self.mem),
  35.             ('RM','green',self.mem),('CM','green',self.canc)],
  36.            [('x^2','blue',self.opun),('RQ','blue',self.opun),
  37.             ('1/x','blue',self.opun),('/','blue',self.opbin)],
  38.            [('7','red',self.cifra),('8','red',self.cifra),
  39.             ('9','red',self.cifra),('*','blue',self.opbin)],
  40.            [('4','red',self.cifra),('5','red',self.cifra),
  41.             ('6','red',self.cifra),('-','blue',self.opbin)],
  42.            [('1','red',self.cifra),('2','red',self.cifra),
  43.             ('3','red',self.cifra),('+','blue',self.opbin)],
  44.            [('0','red',self.cifra),('.','red',self.cifra),
  45.             ('+/-','blue',self.opun),('=','green',self.uguale)]
  46.            ]
  47.     self.dtasti(master, tasti, 6, 0)
  48.  
  49.   def dtasti(self, master, tasti, r, c):
  50.     c0=c
  51.     for rt in tasti:
  52.       for t in rt:
  53.         if t:
  54.           b = Button(master, text=t[0], fg=t[1])
  55.           b.grid(row=r, column=c0)
  56.           b.bind("<1>", t[2])
  57.         c0+=1
  58.       r+=1; c0=c
  59.  
  60.   def dvisu(self, master, visu, r, c):
  61.     c0=c
  62.     for rv in visu:
  63.       for v in rv:
  64.         if v:
  65.           l=Label(master, text=v[0], justify=RIGHT)
  66.           l.grid(row=r, column=c0)
  67.           vis = Entry(master, fg=v[1], textvariable=v[2],
  68.                       state=DISABLED, justify=RIGHT, width=v[3])
  69.           vis.grid(row=r, column=c0+1, columnspan=v[4])
  70.         c0+=2
  71.       r+=1; c0=c
  72.  
  73.   def cifra(self, e):
  74.     stato=self.stato.get()
  75.     if stato=='E':    return
  76.     c=e.widget['text']
  77.     if stato=='=' or stato=='M':
  78.       self.v.set(''); self.op.set(''); self.ins(c)
  79.     elif stato=='N':  self.ins(c)
  80.     elif stato=='O':  self.v.set(''); self.ins(c)
  81.     self.stato.set('N')
  82.  
  83.   def opbin(self, e):
  84.     stato=self.stato.get()
  85.     self.stato.set('O')
  86.     if stato=='E':    return
  87.     op=e.widget['text']
  88.     if stato=='=':
  89.       self.op.set(op); self.y.set(float(self.v.get()))
  90.     elif stato=='N' or stato=='M':
  91.       if self.op.get():
  92.         self.x.set(float(self.v.get())); self.esebin(self.op.get())
  93.       else:
  94.         self.y.set(float(self.v.get()))
  95.       self.op.set(op)
  96.     elif stato=='O':  self.op.set(op)
  97.  
  98.   def uguale(self, e):
  99.     stato=self.stato.get()
  100.     if stato=='E':    return
  101.     if not self.op.get(): return
  102.     op=self.op.get()
  103.     if stato=='=':  self.esebin(op)
  104.     elif stato=='N':  self.x.set(float(self.v.get())); self.esebin(op)
  105.     elif stato=='O':  self.x.set(float(self.v.get())); self.esebin(op)
  106.     self.stato.set('=')
  107.  
  108.   def canc(self,e):
  109.     c=e.widget['text']
  110.     if c=='CM': self.m.set(0)
  111.     else:
  112.       self.v.set('0')
  113.       self.x.set(0)
  114.       if c=='CA': self.y.set(0); self.op.set('')
  115.       self.stato.set('=')
  116.      
  117.   def opun(self, e):
  118.     stato=self.stato.get()
  119.     self.stato.set('=')
  120.     self.x.set(float(self.v.get()))
  121.     if stato=='E':    return
  122.     self.eseun(op=e.widget['text'])
  123.  
  124.   def mem(self, e):
  125.     stato=self.stato.get()
  126.     if stato=='E':    return
  127.     m=e.widget['text']
  128.     if stato=='=' or stato=='M':
  129.       self.esemem(m)
  130.     elif stato=='N':
  131.       if self.op.get():
  132.         op=self.op.get()
  133.         self.x.set(float(self.v.get())); self.esebin(op)
  134.         self.esemem(m)
  135.       else:
  136.         self.esemem(m)
  137.     elif stato=='O':  self.esemem(m)
  138.  
  139.   def ins(self, c):
  140.     if len(self.v.get())<self.max+self.dec:
  141.       if c==".":
  142.         if self.dec: return
  143.         else:        self.dec=1
  144.       self.v.set(self.v.get() + c)
  145.      
  146.   def esebin(self, op):
  147.     y=self.y.get(); x=self.x.get()
  148.     if op=='+':      self.y.set(y+x)
  149.     elif op=='-':    self.y.set(y-x)
  150.     elif op=='*':    self.y.set(y*x)
  151.     elif op=='/':
  152.       if x:      self.y.set(y/x)
  153.       else:
  154.         self.v.set('Err: div zero'); self.stato.set('E')
  155.         return
  156.     self.v.set(str(self.y.get()))
  157.  
  158.   def esemem(self, m):
  159.     if m=='M+':
  160.       self.m.set(self.m.get()+float(self.v.get()))
  161.       self.stato.set('=')
  162.     elif m=='M-':
  163.       self.m.set(self.m.get()-float(self.v.get()))
  164.       self.stato.set('=')
  165.     elif m=='RM':
  166.       self.v.set(str(self.m.get()))
  167.       self.stato.set('M')
  168.  
  169.   def eseun(self, op):
  170.     x=self.x.get()
  171.     if op=='+/-':    self.x.set(-x)
  172.     elif op=='x^2':  self.x.set(x*x)
  173.     elif op=='1/x':  self.x.set(1/x)
  174.     elif op=='RQ':
  175.       if x>=0:       self.x.set(sqrt(x))
  176.       else:
  177.         self.v.set('non reale'); self.stato.set('E')
  178.         return
  179.     self.v.set(str(self.x.get()))
  180.  
  181. root = Tk()
  182. calc = Calcolatrice(root)
  183. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement