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

Diferenças para "CalculadoraComercial"

Diferenças entre as versões de 2 e 13 (11 versões de distância)
Revisão 2e 2006-04-25 12:35:05
Tamanho: 10511
Comentário:
Revisão 13e 2006-05-05 12:14:05
Tamanho: 32733
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 1: Linha 1:
= 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 ==

Linha 2: Linha 11:
#!python
Linha 6: Linha 17:
Autor: Vinicius Rodrigues da Cunha Perallis Autores: Vinicius Rodrigues da Cunha Perallis
                     Gustavo Julião Vaz
                     Fernando Pillo de Lucia
                     Alvaro F. F. Junior
                     Wagner Breschain
                     Guiherme Krulikoswi
                     
Linha 9: Linha 26:
Projeto: Calculadora que trabalha que imita uam fita de
impressão
                     22/04/2006
                     23/04/2006
                     24/04/2006
                     25/04/2006
                     26/04/2006
                     28/04/2006
                     29/04/2006
                     01/04/2006
                     
Projeto: Calculadora Comercial(imita uma fita de impressão)
Materia: Linguagens de Programação Comerciais
Linha 12: Linha 38:
Sistema Operacional: Linux
Sistemas Compativeis:Windows,Linux,Solaris,etc...

Disponível: http://www.pythonbrasil.com.br

Contato: perallis@rc.unesp.br
Linha 18: Linha 49:
#Importa as funções seno,cossseno,tangente,sqrt que
#é usada pela calculadora
from math import *
Linha 23: Linha 57:
    #método Construtor para iniializar a aplicação
Linha 24: Linha 59:
        self.myapp=parent         
 
self.myapp=parent
Linha 26: Linha 62:
        #cria o menu
 self.menubar = Menu(self.myapp)
        self.myapp.config(menu=self.menubar)
        # adiciona o file ao menu
        file = Menu(self.menubar)
        file.add_command(label='Sair',command=self.sair)
        self.menubar.add_cascade(label='Arquivo', \
                                 underline=0, menu=file)
         

        # Adiciona o help ao menu
        help = Menu(self.menubar)
        help.add_command(label='Autores',command=self.autores)
        help.add_command(label='Licença',command=self.licenca)
        help.add_command(label='Como usar?',\
                         command=self.comousar)
        self.menubar.add_cascade(label='Ajuda', underline=0, \
                                 menu=help)
 
Linha 30: Linha 85:
        #Cria os frames nescessarios para a disposição dos widgets no
programa
        #Cria os frames nescessarios para a disposição
       #dos widgets
Linha 38: Linha 93:
                  #Caixa de texto, que servirá para mostrar os numeros
        
self.visor=Entry(self.fexibir,width=23,bg="white",fg="blue",justify="right")
        self.visor.insert(INSERT,0)
        # Frame geral: Escreve um titulo na primeira linha do programa
        self.titulo=Label(self.geral,text=" CALCULADORA PYTHON
",bg="gray",fg="black",font=('Helvetica','10','bold'))
        # Insere a cixa de Texto que seá utilizada para fazer a fita de
impressão
        self.fcinco=Frame(self.geral,bg="gray")

        #Caixa de texto, que servirá para mostrar os
        #numeros
        self.visor=Entry(self.fexibir,width=35,bg="white",\
                         fg="blue",justify="right")
        self.visor.insert(INSERT,"0,")

 #Este trecho de coigo é nescessário para criar
        #os grupos dos botões radio
 self.decimais=IntVar()
        self.habilita=IntVar()
        self.decimais=1
        self.habilita=2
        
 #Botões de rádio , para opcão do nbumero de
        #casas decimais
        self.duascasas=Radiobutton(self.fexibir,\
                                   text="2 casas",\
                                   bg="gray",\
                                   variable=self.decimais, \
                                   command=lambda \
                                   casadec="%.2f": \
                                   self.mudcasadec(casadec))
        self.quatrocasas=Radiobutton(self.fexibir,\
                                     text="4 casas",\
                                     value=3,\
                                     variable=self.decimais, \
                                     bg="gray",command=lambda \
         casadec="%.4f":
                                     self.mudcasadec(casadec))
        self.infinitascasas=Radiobutton(self.fexibir,\
                                        text="... casas ",\
     variable=self.decimais,\
                                        value=4,bg="gray",\
                                        command=lambda \
     casadec="%f": \
                                        self.mudcasadec(casadec))

 #Frame Criado para inserir os botoes de radio
        #habilita/desabilita
        self.festado=Frame(self.geral,bg="gray")
        self.festado.pack(side="bottom")

        #Botões de rádio, para habilitar/desabilitar a
        #fita de impressão
        self.ativado=Radiobutton(self.festado,text="Ativar",\
                                 bg="gray",\
     variable=self.habilita, \
                                 command=lambda : \
                                 self.habilitar(h))
        self.desativado=Radiobutton(self.festado,text="Desativar",\
                                    value=2,\
        variable=self.habilita,\
                                    bg="gray",command=lambda h=2: \
        self.habilitar(h))

        #Espaco para melhor posicionar os botoes habilita/desabilita
   self.espaco=Label(self.festado,text=" \
                                                          ",bg="gray")
        self.espaco.pack(side="left")
        
  #Exibe os Botões de rádio , para habilitar ou desabilitar
        #a fita
        self.ativado.pack(side="left",padx=12,anchor=W)
        self.desativado.pack(side="left",padx=4,anchor=W)
        
        
        # Insere a caixa de Texto que será utilizada para
        #fazer a fita de impressão
Linha 50: Linha 164:
        self.ffita.pack(side="right",padx=15)         self.ffita.pack(side="right",padx=15,pady=5)
Linha 52: Linha 166:
        
self.fita=Text(self.ffita,width=23,height=13,bg="white",yscrollcommand=self.sb.set)
        self.fita=Text(self.ffita,width=23,height=16,\
                       
bg="white",\
                       
yscrollcommand=self.sb.set,\
                       relief="ridge"
)
Linha 59: Linha 175:
        ## WIDGETS NO FRAME ZERO
#########################################################
 ## WIDGETS NO FRAME ZERO #####################
Linha 62: Linha 177:
         self.c=Button(self.fzero,text="C",bg="white",width=4,command=self.zera)         self.c=Button(self.fzero,text="C",fg="red",\
                      width=7,command=self.zera)
        #Botao para limpar apenas o que esta no visor
        self.ce=Button(self.fzero,text="CE",fg="red",\
                       width=7,command=self.zeraprim)
        #Botao Backspace
        self.back=Button(self.fzero,text="Backspace",\
                         fg="red",width=10,\
                         command=self.volta)
Linha 65: Linha 187:
        self.space1=Label(self.fzero,bg="gray",text="
")
        #Botao igual
        
self.igual=Button(self.fzero,text="=",bg="white",width=4,command=lambda sin="": self.op(sin))
        
###################################################################################
        self.v=StringVar()
        self.v.set(" ")
        self.space1=Label(self.fzero,bg="gray",\
                          textvariable=self.v,\
                          relief="groove")
        ##############################################
        
Linha 74: Linha 196:
        ## WIDGETS NO FRAME UM
############################################################
        self.sete=Button(self.fum,text="7",width=4,command=lambda n=7:
self.write_visor(n))
        self.oito=Button(self.fum,text="8",width=4,command=lambda n=8:
self.write_visor(n))
        self.nove=Button(self.fum,text="9",width=4,command=lambda n=9:
self.write_visor(n))
        self.div=Button(self.fum,text="/",fg="red",width=4,
command=lambda sin='/': self.op(sin))
        
###################################################################################

        ## WIDGETS NO FRAME DOIS
############################################################
        self.quatro=Button(self.fdois,text="4",width=4,command=lambda
n=4: self.write_visor(n))
        self.cinco=Button(self.fdois,text="5",width=4,command=lambda
n=5: self.write_visor(n))
        self.seis=Button(self.fdois,text="6",width=4,command=lambda
n=6: self.write_visor(n))
        self.mult=Button(self.fdois,text="*",fg="red",width=4
,command=lambda sin='*': self.op(sin))
        
###################################################################################

        ## WIDGETS NO FRAME TREIS
##########################################################
        self.um=Button(self.ftreis,text="1",width=4,command=lambda n=1:
self.write_visor(n) )
        self.dois=Button(self.ftreis,text="2",width=4,command=lambda
n=2: self.write_visor(n))
        self.tres=Button(self.ftreis,text="3",width=4,command=lambda
n=3: self.write_visor(n))
        self.menos=Button(self.ftreis,text="-",fg="red",width=4,
command=lambda sin='-': self.op(sin) )
        
###################################################################################

        ## WIDGETS NO FRAME
QUATRO#########################################################
        self.zero=Button(self.fquatro,text="0",width=4,command=lambda
n=0: self.write_visor(n))
        self.virg=Button(self.fquatro,text=",",width=4,command=lambda
n='.': self.write_visor(n))
        self.maismenos=Button(self.fquatro,fg="red",text="+/-",width=4,
command=lambda n=-1: self.write_visor(n))
        self.mais=Button(self.fquatro,fg="red",text="+",width=4,
command=lambda sin='+': self.op(sin))
        
###################################################################################

        #Frame fgeral
        self.titulo.pack()
        ## WIDGETS NO FRAME UM #######################
        self.mc=Button(self.fum,text="MC",fg="red",\
                       width=4,command=lambda opm='MC': \
                       self.memoria(opm))
        self.sete=Button(self.fum,text="7",width=4,\
                         command=lambda n=7:\
                         self.write_visor(n))
        self.oito=Button(self.fum,text="8",width=4,\
                         command=lambda n=8: \
                         self.write_visor(n))
        self.nove=Button(self.fum,text="9",width=4,\
                         command=lambda n=9: \
                         self.write_visor(n))
        self.div=Button(self.fum,text="/",fg="red",\
                        width=4, command=lambda sin='/': \
                        self.op(sin))
        self.sqrt=Button(self.fum,text="sqrt",width=4,\
                         fg="blue",command=lambda \
                         n='sqrt': self.write_visor(n))
        ##############################################

        ## WIDGETS NO FRAME DOIS #####################
        self.mr=Button(self.fdois,text="MR",fg="red",\
                       width=4,command=lambda opm='MR': \
                       self.memoria(opm))
        self.quatro=Button(self.fdois,text="4",width=4,\
                           command=lambda n=4: \
                           self.write_visor(n))
        self.cinco=Button(self.fdois,text="5",width=4,\
                          command=lambda n=5: \
                          self.write_visor(n))
        self.seis=Button(self.fdois,text="6",width=4,\
                         command=lambda n=6: \
                         self.write_visor(n))
        self.mult=Button(self.fdois,text="*",fg="red",\
                         width=4 ,command=lambda sin='*': \
                         self.op(sin))
        self.umx=Button(self.fdois,text="1/x",width=4,\
                        fg="blue",command=lambda n='1/x'\
                        : self.write_visor(n))
        ###############################################

        ## WIDGETS NO FRAME TREIS ######################
        self.ms=Button(self.ftreis,text="MS",fg="red",\
                       width=4,command=lambda opm='MS': \
                       self.memoria(opm))
        self.um=Button(self.ftreis,text="1",width=4,\
                       command=lambda n=1:\
                       self.write_visor(n) )
        self.dois=Button(self.ftreis,text="2",\
                         width=4,command=lambda n=2: \
                         self.write_visor(n))
        self.tres=Button(self.ftreis,text="3",width=4,\
                         command=lambda n=3: self.write_visor(n))
        self.menos=Button(self.ftreis,text="-",fg="red",\
                          width=4, command=lambda sin='-': \
                          self.op(sin) )
        self.porcentagem=Button(self.ftreis,text="%",\
                                width=4,fg="blue",\
                                command=lambda n='%': \
                                self.write_visor(n))
        #################################################

        ## WIDGETS NO FRAME QUATRO#########################
        self.mmais=Button(self.fquatro,text="M+",fg="red",
                          width=4,command=lambda opm='M+': \
                          self.memoria(opm))
        self.zero=Button(self.fquatro,text="0",width=4,\
                         command=lambda n=0: \
                         self.write_visor(n))
        self.virg=Button(self.fquatro,text=",",width=4,\
                         command=lambda n='.': \
                         self.write_visor(n))
        self.maismenos=Button(self.fquatro,fg="blue",text="+/-",\
                              width=4, command=lambda n=-1: \
                              self.write_visor(n))
        self.mais=Button(self.fquatro,fg="red",text="+",width=4, \
                         command=lambda sin='+': self.op(sin))
        self.igual=Button(self.fquatro,text="=",fg="red",width=4,\
                          command=lambda sin="=": self.op(sin))
        ####################################################

        ## WIDGETS NO FRAME CINCO#########################
        self.mmenos=Button(self.fcinco,text="M-",fg="red",
                          width=4,command=lambda opm='M-': \
                          self.memoria(opm))
        self.centena=Button(self.fcinco,fg="brown",text="00",\
                            width=4, command=lambda n=100: \
                            self.write_visor(n))
        self.milhares=Button(self.fcinco,fg="brown",text="000",\
                             width=4, command=lambda n=1000: \
                             self.write_visor(n))
        self.mmenos=Button(self.fcinco,text="M-",fg="red",
                          width=4,command=lambda opm='M-': \
                          self.memoria(opm))
        self.seno=Button(self.fcinco,text="sen",fg="brown",
                          width=4,command=lambda n='sen': \
                          self.write_visor(n))
        self.cosseno=Button(self.fcinco,text="cos",fg="brown",
                          width=4,command=lambda n='cos': \
                          self.write_visor(n))
        self.tangente=Button(self.fcinco,text="tan",fg="brown",
                          width=4,command=lambda n='tan': \
                          self.write_visor(n))
        ####################################################
        
Linha 130: Linha 304:
        self.fexibir.pack()         self.fexibir.pack(padx=10,pady=10)
Linha 133: Linha 307:
        self.duascasas.pack(side="left",padx=12,anchor=W)
        self.quatrocasas.pack(side="left",padx=4,anchor=W)
        self.infinitascasas.pack(side="left",padx=4,anchor=W)
Linha 135: Linha 312:
        self.fzero.pack()
       
        self.c.pack(side=LEFT,fill=X,pady="5",padx="2")
        self.igual.pack(side=LEFT,fill=X,pady="5",padx="2")
        self.space1.pack()
        self.fzero.pack()
 
        self.space1.pack(side="left",padx="5")
        self.c.pack(side="left",pady="5",padx="3")
        self.ce.pack(side="left",pady="5",padx="3")
        self.back.pack(side="left",pady="5",padx="3")
        
Linha 142: Linha 321:
        self.fum.pack()
   
        self.fum.pack(padx=2)
        
        self.mc.pack(side="left",padx=4,pady=2)
Linha 148: Linha 328:
        self.sqrt.pack(side="left",padx=2,pady=2)
Linha 150: Linha 331:
        self.fdois.pack()         self.fdois.pack(padx=2)

        self.mr.pack(side="left",padx=4,pady=2)
        self.quatro.pack(side="left",padx=2,pady=2)
        self.cinco.pack(side="left",padx=2,pady=2)
Linha 152: Linha 337:
        self.cinco.pack(side="left",padx=2,pady=2)
        self.quatro.pack(side="left",padx=2,pady=2)
Linha 155: Linha 338:
        self.umx.pack(side="left",padx=2,pady=2)
Linha 157: Linha 341:
        self.ftreis.pack()         self.ftreis.pack(padx=2)

        self.ms.pack(side="left",padx=4,pady=2)
        self.um.pack(side="left",padx=2,pady=2)
        self.dois.pack(side="left",padx=2,pady=2)
Linha 159: Linha 347:
        self.dois.pack(side="left",padx=2,pady=2)
        self.um.pack(side="left",padx=2,pady=2)
Linha 162: Linha 348:
        self.porcentagem.pack(side="left",padx=2,pady=2)
Linha 164: Linha 351:
        self.fquatro.pack()         self.fquatro.pack(padx=2)

        self.mmais.pack(side="left",padx=4,pady=2)
Linha 169: Linha 358:
                 # Variais da classe         self.igual.pack(side="left",padx=2,pady=2)

        #Frame fcinco
        self.fcinco.pack(padx=2)

        self.mmenos.pack(side="left",padx=4,pady=2)
        self.centena.pack(side="left",padx=2,pady=2)
        self.milhares.pack(side="left",padx=2,pady=2)
        self.seno.pack(side="left",padx=2,pady=2)
        self.cosseno.pack(side="left",padx=2,pady=2)
        self.tangente.pack(side="left",padx=2,pady=2)
         
        
        # Variais booleanas da classe
Linha 173: Linha 374:
        self.atual=0
Linha 176: Linha 376:
        self.num=0
Linha 180: Linha 379:
                       ###------------------------------Função para realizar as operações
aritiméticas --------------------------###
        
        self.sinais=1
        self.i=0
        self.prim_op=0
        
 #Controle do numero de vezes que o usario clica
 #na virgula
 self.ponto=1
        
 #Variaveis usadas para guardar os valores do visor
        self.atual=0
        self.num=0
        self.mem=0


        self.casadec="%.2f"

    #metodo para mudar o numero de casas decimais
    def mudcasadec(self,casadec):
        self.casadec=casadec
   

    #-#---------------- Função aritmética op ---------------#-#
Linha 188: Linha 402:
        if (self.w==0):         if (self.w==0) and self.prim_op==1:
Linha 190: Linha 404:
            print self.num             self.atual=float(self.visor.get())
            self.fita.insert(INSERT,self.num)
Linha 195: Linha 410:
            self.ty=0             self.ty=1
Linha 197: Linha 412:
            self.sinais=1
            self.prim=1
            self.ponto=1
Linha 200: Linha 418:
        else :         elif self.prim_op==1:
            
            if sin=="=" and self.i==1 and self.ty==1:
                self.sinais=1
                
            if sin!="=" and self.ty==1:
                self.sinal=sin
                self.sinais=0
                self.atual=float(self.visor.get())
                
Linha 203: Linha 430:
                                            
Linha 208: Linha 435:
     if self.sinal=='+':      if self.sinal=='+' and self.sinais==1:
Linha 210: Linha 437:
            elif self.sinal=='-':                 self.i=0
elif self.sinal=='-' and self.sinais==1:
Linha 212: Linha 440:
            elif self.sinal=='/' and self.ty!=1 and self.atual!=0:             elif self.sinal=='/' and self.sinais==1 and \
                
self.atual!=0:
                self.i=0
Linha 214: Linha 444:
            elif self.sinal=='/' and self.atual==0 and self.ty!=1:             elif self.sinal=='/' and self.atual==0 and \
                 
self.sinais==1:
         self.zera()
Linha 218: Linha 450:
  self.prim=1
            elif self.sinal=='*' and self.ty!=1 and self.prim==1:
  self.sinais=0
            elif self.sinal=='*' and self.prim==1 and \
                 
self.sinais==1:
                self.i=0
Linha 224: Linha 458:
                self.visor.insert(END,self.num)                 self.visor.insert(END,self.casadec %self.num)
Linha 226: Linha 460:
            if self.divi==0 and self.ty==0:             if (self.divi==0 and self.ty==0) or self.sinais==1:
                
Linha 230: Linha 465:
                self.fita.insert(INSERT,"\n"+str(self.num))
            
                                         
            self.atual=0
                self.fita.insert(INSERT,"\n "+\
                                 self.casadec %self.num)

            if sin!="=" and sin!=self.sinal and self.ty==0:
                self.sinais=0
                self.sinal=sin
                self.sinal=sin
                                                    
Linha 238: Linha 477:
            self.div=0 
            self.sinal=sin
    ###------------------------
---------------- Fim da funçõa
aritmética op --------------------------------------###




    ###-------------------------
------- Função para escrever os numeros
no visor ---------------------------------###
            self.div=0
            self.sinais=1
            se
lf.ponto=1
    #-#
---------------- Fim da função aritmética op ---------------#-#



    #+#
------- Função para escrever os numeros no visor ----+#
Linha 249: Linha 486:
        if (self.z==1) and n!=-1:         if (self.z==1) and n!=-1 and n!="1/x" and n!="sqrt" and n!="%" \
           and n!='.' and n!=100 and n!=1000 and n!="sen" and n!="cos" \
           and n!="tan":
Linha 259: Linha 498:
       
        
            self.i=1
            self.prim_op=1
Linha 262: Linha 501:
        elif self.z==0 and n!=-1:         elif self.z==0 and n!=-1 and n!="1/x" and n!="sqrt" and n!="%" \
             and n!='.'and n!=100 and n!=1000 and n!="sen" and n!="cos" \
             and n!="tan":
Linha 266: Linha 507:
            self.fita.insert(INSERT,n)             
Linha 270: Linha 511:
        if n==-1:
            self.la=float(self.visor.get()) * (-1)
            self.i=1
            self.prim_op=1

        el
if n==-1 and self.prim_op==1:
            self.la=(float(self.visor.get())*(-1))
Linha 273: Linha 517:
            self.visor.insert(END,self.la)
self.fita.insert(INSERT,"\n"+"*(-1)")
            self.fita.insert(INSERT,"\n"+"=")
            self.fita.insert(INSERT,"\n"+str(self.la))
            self.visor.insert(END,self.casadec %self.la)
            if self.ty==1:
    
self.fita.insert(INSERT,"\n"+"*(-1)")
                self.fita.insert(INSERT,"\n"+"=")
                self.fita.insert(INSERT,"\n "+self.casadec %self.la)
Linha 278: Linha 523:
                ###---------------------------------------- Fim da funçõa
write_visor --------------------------------------###
       


    ###---------------------------------- Função para reiniciar a calculadora ----------------------------------###
            self.i=0
            self.prim_op=1
          

        elif n=="1/x" and self.prim_op==1:
            try:
                self.la=float(1/float(self.visor.get()))
                self.visor.delete(0,END)
                self.visor.insert(END,self.casadec %self.la)
                if self.ty==1:
                    self.fita.insert(INSERT,"**(-1)")
                    self.fita.insert(INSERT,"\n"+"=")
                    self.fita.insert(INSERT,"\n "+self.casadec %self.la)
                self.sa=1
                self.i=0
            except:
                 self.visor.delete(0,END)
        
 elif n=="sqrt" and self.prim_op==1:
            try:
                self.la=sqrt(float(self.visor.get()))
                self.visor.delete(0,END)
                self.visor.insert(END,self.casadec %self.la)
                if self.ty==1:
                    self.fita.insert(INSERT,"\n"+"sqrt")
                    self.fita.insert(INSERT,"\n"+"=")
                    self.fita.insert(INSERT,"\n "+self.casadec %self.la)
                    
                self.sa=1
                self.i=0
            except:
                self.zera()
                self.visor.delete(0,END)
                self.visor.insert(END,"Valor invalido para função")

        elif n=="sen" and self.prim_op==1:
            try:
                self.la=sin((float(self.visor.get())/180)*pi)
                self.visor.delete(0,END)
                self.visor.insert(END,self.casadec %self.la)
                if self.ty==1:
                    self.fita.insert(INSERT,"\n"+"sen")
                    self.fita.insert(INSERT,"\n"+"=")
                    self.fita.insert(INSERT,"\n " \
                                     +self.casadec %self.la)
                self.sa=1
                self.i=0
            except:
                self.zera()
                self.visor.delete(0,END)
                self.visor.insert(END,"Valor invalido para função")
                
        elif n=="cos" and self.prim_op==1:
            try:
               
                self.la=cos((float(self.visor.get())/180)*pi)
                self.visor.delete(0,END)
                self.visor.insert(END,self.casadec %self.la)
                if self.ty==1:
                    self.fita.insert(INSERT,"\n"+"cos")
                    self.fita.insert(INSERT,"\n"+"=")
                    self.fita.insert(INSERT,"\n "+self.casadec %self.la)
                self.sa=1
                self.i=0
            except:
                self.zera()
                self.visor.delete(0,END)
                self.visor.insert(END,"Valor invalido para função")
                
        elif n=="tan" and self.prim_op==1:
            try:
                self.la=tan((float(self.visor.get())/180)*pi)
                self.visor.delete(0,END)
                self.visor.insert(END,self.casadec %self.la)
                if self.ty==1:
                    self.fita.insert(INSERT,"\n"+"tan")
                    self.fita.insert(INSERT,"\n"+"=")
                    self.fita.insert(INSERT,"\n "+self.casadec %self.la)
                self.sa=1
                self.i=0
            except:
                self.zera()
                self.visor.delete(0,END)
        
 elif n=="%" and self.ty==0 and self.prim_op==1 and self.z==1:
            self.perc=float(self.visor.get())
            self.la=self.num*(float(self.visor.get()))/100
            self.visor.delete(0,END)
            self.visor.insert(END,self.casadec %self.la)
            if self.ty==1:
                self.fita.insert(INSERT,"\n"+"*")
                self.fita.insert(INSERT,"\n"+str(self.perc/100))
                self.fita.insert(INSERT,"\n"+"%")
                self.fita.insert(INSERT,"\n"+"=")
                self.fita.insert(INSERT,"\n "+self.casadec %self.la)
            self.sa=1
            self.i=1

        elif n=="%" and self.ty==1 and self.prim_op==1 and self.z==1:
            self.perc=float(self.visor.get())
            self.la=((float(self.visor.get()))*\
                     (float(self.visor.get())))/100
            self.visor.delete(0,END)
            self.visor.insert(END,self.casadec %self.la)
            if self.ty==1:
                self.fita.insert(INSERT,"\n"+"*")
                self.fita.insert(INSERT,"\n"+str(self.perc/100))
                self.fita.insert(INSERT,"\n"+"=")
                self.fita.insert(INSERT,"\n "+\
                                 self.casadec %self.la)
            self.sa=1
            self.i=1

        elif n=="%" and self.ty==0 and self.prim_op==1 and self.z==0:
            self.perc=float(self.visor.get())
            self.la=((float(self.visor.get()))*(0))/100
            self.visor.delete(0,END)
            self.visor.insert(END,self.casadec %self.la)
            if self.ty==0:
                self.fita.insert(INSERT,"\n"+"*")
                self.fita.insert(INSERT,"\n"+str(0/100))
                self.fita.insert(INSERT,"\n"+"=")
                self.fita.insert(INSERT,"\n "+self.casadec %self.la)
            self.sa=1
            self.i=1


        elif n=='.' and self.ponto==1:
            self.visor.insert(INSERT,n)
            if self.z==0:
                self.fita.insert(INSERT,n)
            self.ponto=0

        
        elif n==100 and self.prim_op==1:
            try:
                self.la=(float(self.visor.get()))*n
                self.visor.delete(0,END)
                self.visor.insert(END,self.casadec %self.la)
                if self.ty==1:
                    self.fita.insert(INSERT,"\n"+"*100")
                    self.fita.insert(INSERT,"\n"+"=")
                    self.fita.insert(INSERT,"\n "+self.casadec %self.la)
                self.sa=1
                self.i=1
            except:
                self.zera()
                self.visor.delete(0,END)
                self.visor.insert(END,"Valor invalido para função")

        elif n==1000 and self.prim_op==1:
            try:
                self.la=(float(self.visor.get()))*n
                self.visor.delete(0,END)
                self.visor.insert(END,self.casadec %self.la)
                if self.ty==1:
                    self.fita.insert(INSERT,"\n"+"*1000")
                    self.fita.insert(INSERT,"\n"+"=")
                    self.fita.insert(INSERT,"\n "+self.casadec %self.la)
                self.sa=1
                self.i=1
            except:
                self.zera()
                self.visor.delete(0,END)
                self.visor.insert(END,"Valor invalido para função")
    #-#--------- Fim da função write_visor ------------#-#


    
    #+#-------Função para manipular a memória----------#+#

    def memoria(self,opm):
        if opm=="MC":
            self.mem=0
            self.v.set(" ")
            
        elif opm=="MR":
             self.visor.delete(0,END)
             self.visor.insert(INSERT,str(self.mem))
             self.i=0
             self.ty=0
        elif opm=="MS":
            self.mem=float(self.visor.get())
            self.v.set(" M ")
            self.i=0
        elif opm=="M+":
            self.mem=self.mem + float(self.visor.get())
            self.v.set(" M ")
            self.i=0
        elif opm=="M-":
            self.mem=self.mem - float(self.visor.get())
            self.v.set(" M ")
            self.i=0
    #-#------------------- Fim Memoria ---- -------------#-#


    #+#------- Função para reiniciar a calculadora ------#+#
Linha 286: Linha 721:
 self.num=0
Linha 292: Linha 726:
        self.num=0
Linha 293: Linha 728:
        self.h=0
        self.sa=0
        self.sinais=1
        self.i=0
        self.prim_op=0
        self.ponto=1
Linha 296: Linha 737:
    ###------------------------------------------- Fim da função
zera-------------------------------------------###
       
        
    #-#----------------- Fim da função zera -------------#-#


    #+#-------------------- Função CE -------------------#+#
    def zeraprim(self):
 if self.ty==0:
            self.visor.delete(0,END)
            self.visor.insert(INSERT,0)
            self.i=0
            
        else:
            self.zera()
    #-#----------------- Fim da função CE ----------------#-#
 
     
    #+#-------------- Função volta(Backspace) ------------#+#
    def volta(self):
        if self.ty==0 and self.prim_op==1:
            tam = len(self.visor.get())
            self.visor.delete(tam-1,tam)
    #-#----------------- Fim da função volta--------------#-#


    #+#------------------- Função Habilita ---------------#+#
    def habilitar(self,h):
        if h==2:
            self.fita["state"]="disabled"
        if h==1:
            self.fita["state"]="normal"
    #-#---------------- Fim da função Habilita-------------#-#


    #+#-----------------Janela Sobre(Autores)---------------#+#
    def autores(self):
                s = """
Autores:
Vinícius Rodrigues da Cunha Perallis
UNESP, Rio Claro
Instituto de Geociências e Ciências Exatas IGCE
Departamento de Estátistica e Matemática aplicada e Computação(DEMAC)
Email: perallis@rc.unesp.br
  """
                message_box = Toplevel()
                message_box.title("Autores:")
                message_box_fr = Frame(message_box)
                message_box_fr.pack(expand=0, fill=BOTH)
                message_lb = Label(message_box_fr, text = s,\
       justify="left")
                message_lb.grid(row=0, column=0)
                quitbutton = Button(message_box_fr,\
         text = 'Fechar', \
                                    command=message_box.destroy,\
        borderwidth=1)
                quitbutton.grid(row=1, column=0)
    #-#----------------Fim de Janela Sobre(Autores)----------#-#


    #+#------------------Janela Sobre(Licenca)---------------#+#
    def licenca(self):
                s = """
Licença: O uso deste programa é gratuito.
              Seu código pode ser melhorado, ou alterado
              conforme a nescessidade do usuário

                    Email: perallis@rc.unesp.br
  """
                message_box = Toplevel()
                message_box.title("Licença:")
                message_box_fr = Frame(message_box)
                message_box_fr.pack(expand=0, fill=BOTH)
                message_lb = Label(message_box_fr, text = s,\
             justify="left")
                message_lb.grid(row=0, column=0)
                quitbutton = Button(message_box_fr,\
        text = 'Fechar', \
        command=message_box.destroy,\
        borderwidth=1)
                quitbutton.grid(row=1, column=0)
    #-#-----------Fim de Janela Licenca(Autores)-------------#-#


    #+#------------------Janela ComoUsar(Licenca)---------------#+#
    def comousar(self):
                s = """
Como Usar: Esta é uma calculadora que opera como qualquer
                  outra calculadora(semelhante a do windows).
                  A unica diferença,é que ela imita uma fita
                  de impressão, como uma calculadora comercial

                       Email: perallis@rc.unesp.br
    """
                message_box = Toplevel()
                message_box.title("Como usar?")
                message_box_fr = Frame(message_box)
                message_box_fr.pack(expand=0, fill=BOTH)
                message_lb = Label(message_box_fr, text = s,\
              justify="left")
                message_lb.grid(row=0, column=0)
                quitbutton = Button(message_box_fr, text = 'Fechar', \
                                    command=message_box.destroy,\
        borderwidth=1)
                quitbutton.grid(row=1, column=0)
    #-#----------------Fim de Janela ComoUsar(Autores)----------#-#


    #+#-------------- Função para sair do programa ----------#+#
    def sair(self):
 root.destroy()
    #-#--------------------- Fim Fnção sair -----------------#-#
Linha 306: Linha 852:
}}}

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