associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Revisão 14e 2006-05-05 12:21:51

Excluir mensagem

CalculadoraComercial

Calculadora Comercial

Esta é uma calculadora que opera semelhante a calculadora do windows(possui memória,raiz quadrada, etc...).Porem ela tambem possui um espaço que imita uma fita de impressão, como uma calculadora comercial.

Foi feita com Tkinter.

Código

   1 #!/usr/bin/python
   2 # -*- coding: cp1252 -*-
   3 
   4 """
   5 Autores:             Vinicius Rodrigues da Cunha Perallis
   6                      Gustavo Julião Vaz
   7                      Fernando Pillo de Lucia
   8                      Alvaro F. F. Junior
   9                      Wagner Breschain
  10                      Guiherme Krulikoswi
  11                      
  12 Data:                19/04/2006
  13                      20/04/2006
  14                      22/04/2006
  15                      23/04/2006
  16                      24/04/2006
  17                      25/04/2006
  18                      26/04/2006
  19                      28/04/2006
  20                      29/04/2006
  21                      01/04/2006
  22                      
  23 Projeto:             Calculadora Comercial(imita uma fita de impressão)
  24 Materia:             Linguagens de Programação Comerciais
  25 Interpretador:       Python 2.4.1
  26 
  27 Sistemas Compativeis:Windows,Linux,Solaris,etc...
  28 
  29 Disponível:          http://www.pythonbrasil.com.br
  30 
  31 Contato:             perallis@rc.unesp.br
  32 """
  33 
  34 
  35 #Importa todas funcoes do modulo Tkinter
  36 from Tkinter import *
  37 #Importa as funções seno,cossseno,tangente,sqrt que 
  38 #é usada pela calculadora
  39 from math import *
  40 
  41 
  42 #Classe Principal que executa o aplicativo Calculadora
  43 class Calculadora:
  44     
  45     #método Construtor para iniializar a aplicação      
  46     def __init__(self,parent):
  47         
  48         self.myapp=parent
  49         self.myapp.title("Calculadora - Phy")
  50         #cria o menu
  51         self.menubar = Menu(self.myapp)
  52         self.myapp.config(menu=self.menubar)
  53         # adiciona o file ao menu
  54         file = Menu(self.menubar)
  55         file.add_command(label='Sair',command=self.sair)
  56         self.menubar.add_cascade(label='Arquivo', \
  57                                  underline=0, menu=file)
  58          
  59 
  60         # Adiciona o help ao menu
  61         help = Menu(self.menubar)
  62         help.add_command(label='Autores',command=self.autores)
  63         help.add_command(label='Licença',command=self.licenca)
  64         help.add_command(label='Como usar?',\
  65                          command=self.comousar)
  66         self.menubar.add_cascade(label='Ajuda', underline=0, \
  67                                  menu=help)
  68  
  69         #Cria o frame principa
  70         self.geral=Frame(self.myapp,bg="gray")
  71         self.geral.pack()
  72         
  73         #Cria os frames nescessarios para a disposição
  74         #dos widgets
  75         self.fexibir=Frame(self.geral,bg="gray")
  76         self.fzero=Frame(self.geral,bg="gray")
  77         self.fum=Frame(self.geral,bg="gray")
  78         self.fdois=Frame(self.geral,bg="gray")
  79         self.ftreis=Frame(self.geral,bg="gray")
  80         self.fquatro=Frame(self.geral,bg="gray")
  81         self.fcinco=Frame(self.geral,bg="gray")
  82 
  83         #Caixa de texto, que servirá para mostrar os
  84         #numeros
  85         self.visor=Entry(self.fexibir,width=35,bg="white",\
  86                          fg="blue",justify="right")
  87         self.visor.insert(INSERT,"0,") 
  88 
  89         #Este trecho de coigo é nescessário para criar
  90         #os grupos dos botões radio
  91         self.decimais=IntVar()
  92         self.habilita=IntVar()
  93         self.decimais=1
  94         self.habilita=2
  95         
  96         #Botões de rádio , para opcão do nbumero de
  97         #casas decimais
  98         self.duascasas=Radiobutton(self.fexibir,\
  99                                    text="2 casas",\
 100                                    bg="gray",\
 101                                    variable=self.decimais, \
 102                                    command=lambda \
 103                                    casadec="%.2f": \
 104                                    self.mudcasadec(casadec))
 105         self.quatrocasas=Radiobutton(self.fexibir,\
 106                                      text="4 casas",\
 107                                      value=3,\
 108                                      variable=self.decimais, \
 109                                      bg="gray",command=lambda \
 110                                      casadec="%.4f": 
 111                                      self.mudcasadec(casadec))
 112         self.infinitascasas=Radiobutton(self.fexibir,\
 113                                         text="... casas ",\
 114                                                 variable=self.decimais,\
 115                                         value=4,bg="gray",\
 116                                         command=lambda \
 117                                                 casadec="%f":  \
 118                                         self.mudcasadec(casadec))  
 119 
 120         #Frame Criado para inserir os botoes de radio
 121         #habilita/desabilita
 122         self.festado=Frame(self.geral,bg="gray")
 123         self.festado.pack(side="bottom")
 124 
 125         #Botões de rádio, para habilitar/desabilitar a
 126         #fita de impressão
 127         self.ativado=Radiobutton(self.festado,text="Ativar",\
 128                                  bg="gray",\
 129                                  variable=self.habilita, \
 130                                  command=lambda : \
 131                                  self.habilitar(h))
 132         self.desativado=Radiobutton(self.festado,text="Desativar",\
 133                                     value=2,\
 134                                     variable=self.habilita,\
 135                                     bg="gray",command=lambda h=2: \
 136                                     self.habilitar(h))
 137 
 138         #Espaco para melhor posicionar os botoes habilita/desabilita
 139         self.espaco=Label(self.festado,text="                        \
 140                                                           ",bg="gray")
 141         self.espaco.pack(side="left") 
 142         
 143         #Exibe os Botões de rádio , para habilitar ou desabilitar
 144         #a fita 
 145         self.ativado.pack(side="left",padx=12,anchor=W)
 146         self.desativado.pack(side="left",padx=4,anchor=W)
 147         
 148         
 149         # Insere a caixa de Texto que será utilizada para
 150         #fazer a fita de impressão
 151         self.ffita=Frame(self.geral)
 152         self.ffita.pack(side="right",padx=15,pady=5)
 153         self.sb=Scrollbar(self.ffita)
 154         self.fita=Text(self.ffita,width=23,height=16,\
 155                        bg="white",\
 156                        yscrollcommand=self.sb.set,\
 157                        relief="ridge")
 158         self.sb["command"] = self.fita.yview
 159         self.fita.pack(side="left",padx=0)
 160         self.sb.pack(side="right",fill=Y)
 161         
 162         
 163         ## WIDGETS NO FRAME ZERO #####################
 164         #Botao para reiniciar a calculadora
 165         self.c=Button(self.fzero,text="C",fg="red",\
 166                       width=7,command=self.zera)
 167         #Botao para limpar apenas o que esta no visor 
 168         self.ce=Button(self.fzero,text="CE",fg="red",\
 169                        width=7,command=self.zeraprim)
 170         #Botao Backspace
 171         self.back=Button(self.fzero,text="Backspace",\
 172                          fg="red",width=10,\
 173                          command=self.volta)
 174         #Label para organizar o programa
 175         self.v=StringVar()
 176         self.v.set("         ")
 177         self.space1=Label(self.fzero,bg="gray",\
 178                           textvariable=self.v,\
 179                           relief="groove")
 180         ##############################################
 181         
 182 
 183        
 184         ## WIDGETS NO FRAME UM #######################
 185         self.mc=Button(self.fum,text="MC",fg="red",\
 186                        width=4,command=lambda opm='MC': \
 187                        self.memoria(opm))
 188         self.sete=Button(self.fum,text="7",width=4,\
 189                          command=lambda n=7:\
 190                          self.write_visor(n))
 191         self.oito=Button(self.fum,text="8",width=4,\
 192                          command=lambda n=8: \
 193                          self.write_visor(n))
 194         self.nove=Button(self.fum,text="9",width=4,\
 195                          command=lambda n=9: \
 196                          self.write_visor(n))
 197         self.div=Button(self.fum,text="/",fg="red",\
 198                         width=4, command=lambda sin='/': \
 199                         self.op(sin))
 200         self.sqrt=Button(self.fum,text="sqrt",width=4,\
 201                          fg="blue",command=lambda \
 202                          n='sqrt': self.write_visor(n))
 203         ##############################################
 204 
 205         ## WIDGETS NO FRAME DOIS #####################
 206         self.mr=Button(self.fdois,text="MR",fg="red",\
 207                        width=4,command=lambda opm='MR': \
 208                        self.memoria(opm))
 209         self.quatro=Button(self.fdois,text="4",width=4,\
 210                            command=lambda n=4: \
 211                            self.write_visor(n))
 212         self.cinco=Button(self.fdois,text="5",width=4,\
 213                           command=lambda n=5: \
 214                           self.write_visor(n))
 215         self.seis=Button(self.fdois,text="6",width=4,\
 216                          command=lambda n=6: \
 217                          self.write_visor(n))
 218         self.mult=Button(self.fdois,text="*",fg="red",\
 219                          width=4 ,command=lambda sin='*': \
 220                          self.op(sin))
 221         self.umx=Button(self.fdois,text="1/x",width=4,\
 222                         fg="blue",command=lambda n='1/x'\
 223                         : self.write_visor(n))
 224         ###############################################
 225 
 226         ## WIDGETS NO FRAME TREIS ######################
 227         self.ms=Button(self.ftreis,text="MS",fg="red",\
 228                        width=4,command=lambda opm='MS': \
 229                        self.memoria(opm))
 230         self.um=Button(self.ftreis,text="1",width=4,\
 231                        command=lambda n=1:\
 232                        self.write_visor(n) )
 233         self.dois=Button(self.ftreis,text="2",\
 234                          width=4,command=lambda n=2: \
 235                          self.write_visor(n))
 236         self.tres=Button(self.ftreis,text="3",width=4,\
 237                          command=lambda n=3: self.write_visor(n))
 238         self.menos=Button(self.ftreis,text="-",fg="red",\
 239                           width=4, command=lambda sin='-': \
 240                           self.op(sin) )
 241         self.porcentagem=Button(self.ftreis,text="%",\
 242                                 width=4,fg="blue",\
 243                                 command=lambda n='%': \
 244                                 self.write_visor(n))
 245         #################################################
 246 
 247         ## WIDGETS NO FRAME QUATRO#########################
 248         self.mmais=Button(self.fquatro,text="M+",fg="red",
 249                           width=4,command=lambda opm='M+': \
 250                           self.memoria(opm))
 251         self.zero=Button(self.fquatro,text="0",width=4,\
 252                          command=lambda n=0: \
 253                          self.write_visor(n))
 254         self.virg=Button(self.fquatro,text=",",width=4,\
 255                          command=lambda n='.': \
 256                          self.write_visor(n))
 257         self.maismenos=Button(self.fquatro,fg="blue",text="+/-",\
 258                               width=4, command=lambda n=-1: \
 259                               self.write_visor(n))
 260         self.mais=Button(self.fquatro,fg="red",text="+",width=4, \
 261                          command=lambda sin='+': self.op(sin))
 262         self.igual=Button(self.fquatro,text="=",fg="red",width=4,\
 263                           command=lambda sin="=": self.op(sin))
 264         ####################################################
 265 
 266         ## WIDGETS NO FRAME CINCO#########################
 267         self.mmenos=Button(self.fcinco,text="M-",fg="red",
 268                           width=4,command=lambda opm='M-': \
 269                           self.memoria(opm))
 270         self.centena=Button(self.fcinco,fg="brown",text="00",\
 271                             width=4, command=lambda n=100: \
 272                             self.write_visor(n))
 273         self.milhares=Button(self.fcinco,fg="brown",text="000",\
 274                              width=4, command=lambda n=1000: \
 275                              self.write_visor(n))
 276         self.mmenos=Button(self.fcinco,text="M-",fg="red",
 277                           width=4,command=lambda opm='M-': \
 278                           self.memoria(opm))
 279         self.seno=Button(self.fcinco,text="sen",fg="brown",
 280                           width=4,command=lambda n='sen': \
 281                           self.write_visor(n))
 282         self.cosseno=Button(self.fcinco,text="cos",fg="brown",
 283                           width=4,command=lambda n='cos': \
 284                           self.write_visor(n))
 285         self.tangente=Button(self.fcinco,text="tan",fg="brown",
 286                           width=4,command=lambda n='tan': \
 287                           self.write_visor(n))
 288         ####################################################
 289         
 290          
 291         #Frame fexibir   
 292         self.fexibir.pack(padx=10,pady=10)
 293        
 294         self.visor.pack(ipadx="3")
 295         self.duascasas.pack(side="left",padx=12,anchor=W)
 296         self.quatrocasas.pack(side="left",padx=4,anchor=W)
 297         self.infinitascasas.pack(side="left",padx=4,anchor=W)
 298    
 299         #Frame fzero  
 300         self.fzero.pack()
 301         
 302         self.space1.pack(side="left",padx="5")
 303         self.c.pack(side="left",pady="5",padx="3")
 304         self.ce.pack(side="left",pady="5",padx="3")
 305         self.back.pack(side="left",pady="5",padx="3")
 306         
 307 
 308         #Frame fum   
 309         self.fum.pack(padx=2)
 310         
 311         self.mc.pack(side="left",padx=4,pady=2)
 312         self.sete.pack(side="left",padx=2,pady=2)
 313         self.oito.pack(side="left",padx=2,pady=2)
 314         self.nove.pack(side="left",padx=2,pady=2)
 315         self.div.pack(side="left",padx=2,pady=2)
 316         self.sqrt.pack(side="left",padx=2,pady=2)
 317         
 318         #Frame fdois   
 319         self.fdois.pack(padx=2)
 320 
 321         self.mr.pack(side="left",padx=4,pady=2)
 322         self.quatro.pack(side="left",padx=2,pady=2)
 323         self.cinco.pack(side="left",padx=2,pady=2)
 324         self.seis.pack(side="left",padx=2,pady=2)
 325         self.mult.pack(side="left",padx=2,pady=2)
 326         self.umx.pack(side="left",padx=2,pady=2)
 327 
 328         #Frame ftreis 
 329         self.ftreis.pack(padx=2)
 330 
 331         self.ms.pack(side="left",padx=4,pady=2)
 332         self.um.pack(side="left",padx=2,pady=2)
 333         self.dois.pack(side="left",padx=2,pady=2)
 334         self.tres.pack(side="left",padx=2,pady=2)
 335         self.menos.pack(side="left",padx=2,pady=2)
 336         self.porcentagem.pack(side="left",padx=2,pady=2)
 337 
 338         #Frame fquatro   
 339         self.fquatro.pack(padx=2)
 340 
 341         self.mmais.pack(side="left",padx=4,pady=2)
 342         self.maismenos.pack(side="left",padx=2,pady=2)
 343         self.zero.pack(side="left",padx=2,pady=2)
 344         self.virg.pack(side="left",padx=2,pady=2)
 345         self.mais.pack(side="left",padx=2,pady=2)
 346         self.igual.pack(side="left",padx=2,pady=2)
 347 
 348         #Frame fcinco   
 349         self.fcinco.pack(padx=2)
 350 
 351         self.mmenos.pack(side="left",padx=4,pady=2)
 352         self.centena.pack(side="left",padx=2,pady=2)
 353         self.milhares.pack(side="left",padx=2,pady=2)
 354         self.seno.pack(side="left",padx=2,pady=2)
 355         self.cosseno.pack(side="left",padx=2,pady=2)
 356         self.tangente.pack(side="left",padx=2,pady=2)
 357          
 358         
 359         #  Variais booleanas da classe 
 360         self.z=0
 361         self.w=1
 362         self.i=0
 363         self.ty=0
 364         self.prim=0
 365         self.h=0
 366         self.sa=0
 367         self.sinais=1
 368         self.i=0
 369         self.prim_op=0
 370         
 371         #Controle do numero de vezes que o usario clica
 372         #na virgula
 373         self.ponto=1        
 374         
 375         #Variaveis usadas para guardar os valores do visor
 376         self.atual=0
 377         self.num=0
 378         self.mem=0
 379 
 380 
 381         self.casadec="%.2f"
 382 
 383     #metodo para mudar o numero de casas decimais       
 384     def mudcasadec(self,casadec):
 385         self.casadec=casadec
 386    
 387 
 388     #-#--------------- Função aritmética op -------------#-#        
 389     def op(self,sin):
 390         if (self.w==0) and self.prim_op==1:
 391             self.num=float(self.visor.get())
 392             self.atual=float(self.visor.get())
 393             self.fita.insert(INSERT,self.num)
 394             self.sinal=sin
 395             self.w=1
 396             self.z=1
 397             self.i=0 
 398             self.ty=1
 399             self.divi=0
 400             self.sinais=1
 401             self.prim=1
 402             self.ponto=1
 403             if self.prim==0:
 404                 self.ty=1
 405                 
 406         elif self.prim_op==1:   
 407             
 408             if sin=="=" and self.i==1 and self.ty==1: 
 409                 self.sinais=1
 410                 
 411             if sin!="=" and self.ty==1:
 412                 self.sinal=sin
 413                 self.sinais=0
 414                 self.atual=float(self.visor.get())
 415                 
 416             if self.ty==0:
 417                 self.atual=float(self.visor.get())
 418                            
 419             if self.sa==1 and self.ty==1:
 420                 self.num=float(self.visor.get())
 421                 self.sa=0
 422                 
 423             if self.sinal=='+' and self.sinais==1:
 424                 self.num=self.num + self.atual
 425                 self.i=0
 426             elif  self.sinal=='-' and self.sinais==1:
 427                 self.num=self.num - self.atual
 428             elif  self.sinal=='/' and self.sinais==1 and \
 429                  self.atual!=0:
 430                 self.i=0
 431                 self.num=self.num / self.atual
 432             elif  self.sinal=='/' and self.atual==0 and \
 433                  self.sinais==1:
 434                 self.zera()        
 435                 self.visor.delete(0,END)
 436                 self.visor.insert(INSERT,"Imposivel dividir")
 437                 self.divi=1
 438                 self.sinais=0
 439             elif  self.sinal=='*' and self.prim==1 and \
 440                  self.sinais==1:
 441                 self.i=0
 442                 self.num=self.num * self.atual
 443             
 444             if self.divi==0:
 445                 self.visor.delete(0,END)
 446                 self.visor.insert(END,self.casadec %self.num)
 447                 self.prim=1
 448             if (self.divi==0 and self.ty==0) or self.sinais==1:
 449                 
 450                 self.fita.insert(INSERT,"\n"+self.sinal)
 451                 self.fita.insert(INSERT,"\n"+str(self.atual))
 452                 self.fita.insert(INSERT,"\n"+"=")
 453                 self.fita.insert(INSERT,"\n "+\
 454                                  self.casadec %self.num)
 455 
 456             if sin!="=" and sin!=self.sinal and self.ty==0:
 457                 self.sinais=0
 458                 self.sinal=sin
 459                 self.sinal=sin
 460                                                     
 461             self.ty=1
 462             self.i=0
 463             self.w=1
 464             self.z=1
 465             self.div=0
 466             self.sinais=1
 467             self.ponto=1
 468     #-#--------------  Fim da função aritmética op ---------#-#
 469 
 470 
 471 
 472     #+#------- Função para escrever os numeros no visor ----#+#       
 473     def write_visor(self,n):
 474         if (self.z==1) and n!=-1 and n!="1/x" and  n!="sqrt" \
 475            and  n!="%" and n!='.' and n!=100 and n!=1000 \
 476            and n!="sen" and n!="cos" \
 477            and n!="tan":
 478             if self.i==0: 
 479                  self.visor.delete(0,END)         
 480           
 481             self.visor.insert(INSERT,n)
 482             self.w=1
 483             self.z=1
 484             self.i=1
 485             self.ty=0
 486             self.prim=1
 487             self.i=1
 488             self.prim_op=1
 489             
 490         elif self.z==0 and n!=-1 and n!="1/x" and  n!="sqrt" \
 491              and  n!="%" and n!='.'and n!=100 and n!=1000 \
 492              and n!="sen" and n!="cos" \
 493              and n!="tan":
 494             if self.i==0:
 495                 self.visor.delete(0,END)         
 496             self.visor.insert(INSERT,n)
 497             
 498             self.w=0
 499             self.i=1
 500             self.ty=0
 501             self.i=1
 502             self.prim_op=1
 503 
 504         elif  n==-1 and self.prim_op==1:
 505             self.la=(float(self.visor.get())*(-1))
 506             self.visor.delete(0,END)
 507             self.visor.insert(END,self.casadec %self.la)
 508             if self.ty==1:
 509                 self.fita.insert(INSERT,"\n"+"*(-1)")
 510                 self.fita.insert(INSERT,"\n"+"=")
 511                 self.fita.insert(INSERT,"\n "+\
 512                                  self.casadec %self.la)
 513             self.sa=1
 514             self.i=0
 515             self.prim_op=1
 516           
 517 
 518         elif  n=="1/x" and self.prim_op==1:
 519             try:
 520                 self.la=float(1/float(self.visor.get())) 
 521                 self.visor.delete(0,END)
 522                 self.visor.insert(END,self.casadec %self.la)
 523                 if self.ty==1:
 524                     self.fita.insert(INSERT,"**(-1)")
 525                     self.fita.insert(INSERT,"\n"+"=")
 526                     self.fita.insert(INSERT,"\n "+\
 527                                      self.casadec %self.la)
 528                 self.sa=1
 529                 self.i=0
 530             except:
 531                  self.visor.delete(0,END)
 532         
 533         elif  n=="sqrt" and self.prim_op==1:
 534             try:    
 535                 self.la=sqrt(float(self.visor.get()))
 536                 self.visor.delete(0,END)
 537                 self.visor.insert(END,self.casadec %self.la)
 538                 if self.ty==1:
 539                     self.fita.insert(INSERT,"\n"+"sqrt")
 540                     self.fita.insert(INSERT,"\n"+"=")
 541                     self.fita.insert(INSERT,"\n "+\
 542                                      self.casadec %self.la)
 543                     
 544                 self.sa=1
 545                 self.i=0
 546             except:
 547                 self.zera()
 548                 self.visor.delete(0,END)
 549                 self.visor.insert(END,\
 550                                   "Valor invalido para função")
 551 
 552         elif  n=="sen" and self.prim_op==1:
 553             try:    
 554                 self.la=sin((float(self.visor.get())/180)*pi)
 555                 self.visor.delete(0,END)
 556                 self.visor.insert(END,self.casadec %self.la)
 557                 if self.ty==1:
 558                     self.fita.insert(INSERT,"\n"+"sen")
 559                     self.fita.insert(INSERT,"\n"+"=")
 560                     self.fita.insert(INSERT,"\n " \
 561                                      +self.casadec %self.la)
 562                 self.sa=1
 563                 self.i=0
 564             except:
 565                 self.zera()
 566                 self.visor.delete(0,END)
 567                 self.visor.insert(END,\
 568                                   "Valor invalido para função")
 569                 
 570         elif  n=="cos" and self.prim_op==1:
 571             try:
 572                
 573                 self.la=cos((float(self.visor.get())/180)*pi)
 574                 self.visor.delete(0,END)
 575                 self.visor.insert(END,self.casadec %self.la)
 576                 if self.ty==1:
 577                     self.fita.insert(INSERT,"\n"+"cos")
 578                     self.fita.insert(INSERT,"\n"+"=")
 579                     self.fita.insert(INSERT,"\n "\
 580                                      +self.casadec %self.la)
 581                 self.sa=1
 582                 self.i=0
 583             except:
 584                 self.zera()
 585                 self.visor.delete(0,END)
 586                 self.visor.insert(END,"Valor invalido para função")
 587                 
 588         elif  n=="tan" and self.prim_op==1:
 589             try:    
 590                 self.la=tan((float(self.visor.get())/180)*pi)
 591                 self.visor.delete(0,END)
 592                 self.visor.insert(END,self.casadec %self.la)
 593                 if self.ty==1:
 594                     self.fita.insert(INSERT,"\n"+"tan")
 595                     self.fita.insert(INSERT,"\n"+"=")
 596                     self.fita.insert(INSERT,"\n "\
 597                                      +self.casadec %self.la)
 598                 self.sa=1
 599                 self.i=0
 600             except:
 601                 self.zera()
 602                 self.visor.delete(0,END)
 603         
 604         elif  n=="%" and self.ty==0 and self.prim_op==1 \
 605              and self.z==1:
 606             self.perc=float(self.visor.get())
 607             self.la=self.num*(float(self.visor.get()))/100
 608             self.visor.delete(0,END)
 609             self.visor.insert(END,self.casadec %self.la)
 610             if self.ty==1:
 611                 self.fita.insert(INSERT,"\n"+"*")
 612                 self.fita.insert(INSERT,"\n"+\
 613                                  str(self.perc/100))
 614                 self.fita.insert(INSERT,"\n"+"%")
 615                 self.fita.insert(INSERT,"\n"+"=")
 616                 self.fita.insert(INSERT,"\n "+\
 617                                  self.casadec %self.la)
 618             self.sa=1
 619             self.i=1
 620 
 621         elif  n=="%" and self.ty==1 and self.prim_op==1 \
 622              and self.z==1:
 623             self.perc=float(self.visor.get())
 624             self.la=((float(self.visor.get()))*\
 625                      (float(self.visor.get())))/100
 626             self.visor.delete(0,END)
 627             self.visor.insert(END,self.casadec %self.la)
 628             if self.ty==1:
 629                 self.fita.insert(INSERT,"\n"+"*")
 630                 self.fita.insert(INSERT,"\n"+ \
 631                                  str(self.perc/100))
 632                 self.fita.insert(INSERT,"\n"+"=")
 633                 self.fita.insert(INSERT,"\n "+\
 634                                  self.casadec %self.la)
 635             self.sa=1
 636             self.i=1
 637 
 638         elif  n=="%" and self.ty==0 and self.prim_op==1 \
 639              and self.z==0:
 640             self.perc=float(self.visor.get())
 641             self.la=((float(self.visor.get()))*(0))/100
 642             self.visor.delete(0,END)
 643             self.visor.insert(END,self.casadec %self.la)
 644             if self.ty==0:
 645                 self.fita.insert(INSERT,"\n"+"*")
 646                 self.fita.insert(INSERT,"\n"+str(0/100))
 647                 self.fita.insert(INSERT,"\n"+"=")
 648                 self.fita.insert(INSERT,"\n "\
 649                                  +self.casadec %self.la)
 650             self.sa=1
 651             self.i=1
 652 
 653 
 654         elif n=='.' and self.ponto==1:      
 655             self.visor.insert(INSERT,n)
 656             if self.z==0:
 657                 self.fita.insert(INSERT,n)
 658             self.ponto=0
 659 
 660         
 661         elif  n==100 and self.prim_op==1:
 662             try:    
 663                 self.la=(float(self.visor.get()))*n
 664                 self.visor.delete(0,END)
 665                 self.visor.insert(END,self.casadec %self.la)
 666                 if self.ty==1:
 667                     self.fita.insert(INSERT,"\n"+"*100")
 668                     self.fita.insert(INSERT,"\n"+"=")
 669                     self.fita.insert(INSERT,"\n "\
 670                                      +self.casadec %self.la)
 671                 self.sa=1
 672                 self.i=1
 673             except:
 674                 self.zera()
 675                 self.visor.delete(0,END)
 676                 self.visor.insert(END,\
 677                                   "Valor invalido para função")
 678 
 679         elif  n==1000 and self.prim_op==1:
 680             try:    
 681                 self.la=(float(self.visor.get()))*n
 682                 self.visor.delete(0,END)
 683                 self.visor.insert(END,self.casadec %self.la)
 684                 if self.ty==1:
 685                     self.fita.insert(INSERT,"\n"+"*1000")
 686                     self.fita.insert(INSERT,"\n"+"=")
 687                     self.fita.insert(INSERT,"\n "\
 688                                      +self.casadec %self.la)
 689                 self.sa=1
 690                 self.i=1
 691             except:
 692                 self.zera()
 693                 self.visor.delete(0,END)
 694                 self.visor.insert(END,"Valor invalido para função")
 695     #-#--------- Fim da função write_visor ------------#-#
 696 
 697 
 698     
 699     #+#-------Função para manipular a memória----------#+#
 700 
 701     def memoria(self,opm):
 702         if opm=="MC":
 703             self.mem=0
 704             self.v.set("         ")
 705             
 706         elif opm=="MR":
 707              self.visor.delete(0,END)         
 708              self.visor.insert(INSERT,str(self.mem))
 709              self.i=0
 710              self.ty=0
 711         elif opm=="MS":
 712             self.mem=float(self.visor.get())
 713             self.v.set("   M   ")
 714             self.i=0
 715         elif opm=="M+":
 716             self.mem=self.mem + float(self.visor.get())
 717             self.v.set("   M   ")
 718             self.i=0
 719         elif opm=="M-":
 720             self.mem=self.mem - float(self.visor.get())
 721             self.v.set("   M   ")
 722             self.i=0
 723     #-#------------------- Fim Memoria ---- -------------#-#
 724 
 725 
 726     #+#------- Função para reiniciar a calculadora ------#+#     
 727     def zera(self):
 728         self.z=0
 729         self.w=1
 730         self.atual=0
 731         self.i=0
 732         self.ty=0
 733         self.num=0
 734         self.prim=0
 735         self.h=0
 736         self.sa=0
 737         self.sinais=1
 738         self.i=0
 739         self.prim_op=0
 740         self.ponto=1
 741         self.visor.delete(0,END)
 742         self.visor.insert(INSERT,0)
 743         self.fita.delete('1.0','90.0')
 744     #-#----------------- Fim da função zera -------------#-#
 745 
 746 
 747     #+#-------------------- Função CE -------------------#+#    
 748     def zeraprim(self):
 749         if  self.ty==0:
 750             self.visor.delete(0,END)
 751             self.visor.insert(INSERT,0)
 752             self.i=0
 753             
 754         else:
 755             self.zera()
 756     #-#----------------- Fim da função CE ----------------#-#
 757         
 758         
 759     #+#-------------- Função volta(Backspace) ------------#+#    
 760     def volta(self):
 761         if self.ty==0 and self.prim_op==1:
 762             tam = len(self.visor.get())
 763             self.visor.delete(tam-1,tam)                
 764     #-#----------------- Fim da função volta--------------#-#
 765 
 766 
 767     #+#------------------- Função Habilita ---------------#+#    
 768     def habilitar(self,h):
 769         if h==2:
 770             self.fita["state"]="disabled"
 771         if h==1:
 772             self.fita["state"]="normal"
 773     #-#---------------- Fim da função Habilita-------------#-#
 774 
 775 
 776     #+#-----------------Janela Sobre(Autores)--------------#+#
 777     def autores(self):
 778                 s = """
 779 Autores:
 780 Vinícius Rodrigues da Cunha Perallis
 781 UNESP, Rio Claro
 782 Instituto de Geociências e Ciências Exatas IGCE 
 783 Email: perallis@rc.unesp.br
 784                 """
 785                 message_box = Toplevel()
 786                 message_box.title("Autores:")
 787                 message_box_fr = Frame(message_box)
 788                 message_box_fr.pack(expand=0, fill=BOTH)
 789                 message_lb = Label(message_box_fr, text = s,\
 790                                    justify="left")
 791                 message_lb.grid(row=0, column=0)
 792                 quitbutton = Button(message_box_fr,\
 793                                     text = 'Fechar', \
 794                                     command=message_box.destroy,\
 795                                     borderwidth=1)
 796                 quitbutton.grid(row=1, column=0)
 797     #-#----------------Fim de Janela Sobre(Autores)----------#-#
 798 
 799 
 800     #+#------------------Janela Sobre(Licenca)---------------#+#
 801     def licenca(self):
 802                 s = """
 803 Licença: O uso deste programa é gratuito.
 804               Seu código pode ser melhorado, ou alterado
 805               conforme a nescessidade do usuário
 806 
 807                     Email: perallis@rc.unesp.br
 808                 """
 809                 message_box = Toplevel()
 810                 message_box.title("Licença:")
 811                 message_box_fr = Frame(message_box)
 812                 message_box_fr.pack(expand=0, fill=BOTH)
 813                 message_lb = Label(message_box_fr, text = s,\
 814                                   justify="left")
 815                 message_lb.grid(row=0, column=0)
 816                 quitbutton = Button(message_box_fr,\
 817                                     text = 'Fechar', \
 818                                     command=message_box.destroy,\
 819                                     borderwidth=1)
 820                 quitbutton.grid(row=1, column=0)
 821     #-#-----------Fim de Janela Licenca(Autores)-------------#-#
 822 
 823 
 824     #+#------------------Janela ComoUsar(Licenca)------------#+#
 825     def comousar(self):
 826                 s = """
 827 Como Usar: Esta é uma calculadora que opera como qualquer
 828                   outra calculadora(semelhante a do windows).
 829                   A unica diferença,é que ela imita uma fita
 830                   de impressão, como uma calculadora comercial
 831 
 832                        Email: perallis@rc.unesp.br
 833                   """
 834                 message_box = Toplevel()
 835                 message_box.title("Como usar?")
 836                 message_box_fr = Frame(message_box)
 837                 message_box_fr.pack(expand=0, fill=BOTH)
 838                 message_lb = Label(message_box_fr, text = s,\
 839                                    justify="left")
 840                 message_lb.grid(row=0, column=0)
 841                 quitbutton = Button(message_box_fr, \
 842                                     text = 'Fechar', \
 843                                     command=message_box.destroy,\
 844                                     borderwidth=1)
 845                 quitbutton.grid(row=1, column=0)
 846     #-#----------------Fim de Janela ComoUsar(Autores)-------#-#
 847 
 848 
 849     #+#-------------- Função para sair do programa ----------#+#
 850     def sair(self):
 851         root.destroy()
 852     #-#--------------------- Fim Fnção sair -----------------#-#
 853 
 854             
 855 # root Intacia-se pela classe Tk() e inicia a aplicação       
 856 root=Tk()
 857 aplicativo=Calculadora(root)
 858 root.mainloop()