11346
Comentário:
|
33304
|
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 4: | Linha 13: |
Linha 10: | 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 13: | Linha 26: |
Projeto: Calculadora Comercial Finalidade: Calculadora que opera semelhante a calculadora do windows, alem de conter uma caixa de texto que imita uma 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 20: | Linha 38: |
Sistema Operacional: Linux, Windows Email:perallis@rc.unesp.br |
Sistemas Compativeis:Windows,Linux,Solaris,etc... Disponível: http://www.pythonbrasil.com.br Contato: perallis@rc.unesp.br |
Linha 30: | Linha 49: |
#Importa as funções seno,cossseno,tangente,sqrt que #é usada pela calculadora from math import * |
|
Linha 35: | Linha 57: |
#método Construtor para iniializar a aplicação | |
Linha 36: | Linha 59: |
self.myapp=parent | self.myapp=parent |
Linha 38: | 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 42: | Linha 85: |
"""Cria os frames nescessarios para a disposição dos widgets no programa""" """Cria os frames nescessarios para a disposição dos widgets no programa""" |
#Cria os frames nescessarios para a disposição #dos widgets |
Linha 55: | Linha 93: |
#Caixa de texto, que servirá para mostrar os numeros self.visor=Entry(self.fexibir,width=23,bg="white", \ |
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",\ |
Linha 61: | Linha 99: |
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.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 74: | Linha 164: |
self.ffita.pack(side="right",padx=15) | self.ffita.pack(side="right",padx=15,pady=5) |
Linha 76: | 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 84: | Linha 175: |
## WIDGETS NO FRAME ZERO ########################### |
## WIDGETS NO FRAME ZERO ##################### |
Linha 87: | 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) #Label para organizar o programa self.v=StringVar() self.v.set(" ") self.space1=Label(self.fzero,bg="gray",\ textvariable=self.v,\ relief="groove") ############################################## |
Linha 91: | Linha 196: |
#Label para organizar o programa 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)) ##################################################### ## WIDGETS NO FRAME UM ################## |
## WIDGETS NO FRAME UM ####################### self.mc=Button(self.fum,text="MC",fg="red",\ width=4,command=lambda opm='MC': \ self.memoria(opm)) |
Linha 106: | Linha 201: |
command=lambda n=7: \ | command=lambda n=7:\ |
Linha 117: | Linha 212: |
###################################################### ## WIDGETS NO FRAME DOIS ############################# |
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)) |
Linha 133: | Linha 233: |
####################################################### ## 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.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)) |
Linha 147: | Linha 251: |
width=4,command=lambda sin='-': \ | width=4, command=lambda sin='-': \ |
Linha 149: | Linha 253: |
######################################################### ## 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="+/-",\ |
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="+/-",\ |
Linha 163: | Linha 272: |
self.mais=Button(self.fquatro,fg="red",text="+",\ width=4,command=lambda sin='+': \ self.op(sin)) ########################################################### #Frame fgeral self.titulo.pack() |
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 175: | Linha 304: |
self.fexibir.pack() | self.fexibir.pack(padx=10,pady=10) |
Linha 178: | 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 180: | 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 187: | Linha 321: |
self.fum.pack() |
self.fum.pack(padx=2) self.mc.pack(side="left",padx=4,pady=2) |
Linha 193: | Linha 328: |
self.sqrt.pack(side="left",padx=2,pady=2) | |
Linha 195: | 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 197: | Linha 337: |
self.cinco.pack(side="left",padx=2,pady=2) self.quatro.pack(side="left",padx=2,pady=2) |
|
Linha 200: | Linha 338: |
self.umx.pack(side="left",padx=2,pady=2) | |
Linha 202: | 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 204: | Linha 347: |
self.dois.pack(side="left",padx=2,pady=2) self.um.pack(side="left",padx=2,pady=2) |
|
Linha 207: | Linha 348: |
self.porcentagem.pack(side="left",padx=2,pady=2) | |
Linha 209: | Linha 351: |
self.fquatro.pack() | self.fquatro.pack(padx=2) self.mmais.pack(side="left",padx=4,pady=2) |
Linha 214: | 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 218: | Linha 374: |
self.atual=0 | |
Linha 221: | Linha 376: |
self.num=0 | |
Linha 225: | 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 232: | Linha 402: |
if (self.w==0): | if (self.w==0) and self.prim_op==1: |
Linha 234: | Linha 404: |
print self.num | self.atual=float(self.visor.get()) self.fita.insert(INSERT,self.num) |
Linha 239: | Linha 410: |
self.ty=0 | self.ty=1 |
Linha 241: | Linha 412: |
self.sinais=1 self.prim=1 self.ponto=1 |
|
Linha 244: | 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 247: | Linha 430: |
Linha 252: | Linha 435: |
if self.sinal=='+': | if self.sinal=='+' and self.sinais==1: |
Linha 254: | Linha 437: |
elif self.sinal=='-': | self.i=0 elif self.sinal=='-' and self.sinais==1: |
Linha 256: | 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 258: | 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 262: | 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 268: | Linha 458: |
self.visor.insert(END,self.num) | self.visor.insert(END,self.casadec %self.num) |
Linha 270: | Linha 460: |
if self.divi==0 and self.ty==0: | if (self.divi==0 and self.ty==0) or self.sinais==1: |
Linha 274: | 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 282: | 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 self.ponto=1 #-#-------------- Fim da função aritmética op ---------#-# #+#------- Função para escrever os numeros no visor ----#+# |
Linha 292: | 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 302: | Linha 499: |
|
self.i=1 self.prim_op=1 |
Linha 305: | Linha 502: |
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 309: | Linha 509: |
self.fita.insert(INSERT,n) | |
Linha 313: | Linha 513: |
if n==-1: self.la=float(self.visor.get()) * (-1) |
self.i=1 self.prim_op=1 elif n==-1 and self.prim_op==1: self.la=(float(self.visor.get())*(-1)) |
Linha 316: | Linha 519: |
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 321: | Linha 526: |
###--------------- 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 329: | Linha 740: |
self.num=0 | |
Linha 335: | Linha 745: |
self.num=0 | |
Linha 336: | Linha 747: |
self.h=0 self.sa=0 self.sinais=1 self.i=0 self.prim_op=0 self.ponto=1 |
|
Linha 339: | Linha 756: |
###------------------ 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 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 -----------------#-# |
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()