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

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