Oi Pessoa , neste tutorial iremos criar uma Calculadora usando Python Tkinter.
Se você não sabe usar o Tkinter, não se preocupe, vá para este TUTORIAL, e você pode aprender em apenas 2 horas, é muito fácil de aprender.
O propósito desse aplicativo e de aprofundarmos melhor em como trabalhar com Python Funções e variáveis globais.
Para mais aplicativos como este considere em visitar o meu canal USANDO PYTHON, e se inscreva e ativa o sininho para não perder nenhum vídeo novo.
Criando a interface
Começaremos por criar um novo ficheiro Python, o meu irei nomeá-lo de calculadora.py, e salve ele.
Aqui iremos usar o TKINTER para a interface gráfica, então começaremos por importar ele para dentro do nosso script.
#importando Tkinter
from tkinter import *
from tkinter import ttk
Após importar o Tkinter, agora iremos criar uma janela que será a janela principal de nosso aplicativo, e também definiremos uma cor para ela.
# cores
co1 = "#feffff" # white/branca
co2 = "#38576b"
co3 ="#ECEFF1"
co4='#FFAB40' # Orange/laranja
fundo = "#3b3b3b" # black/preta
janela = Tk()
janela.title('')
janela.geometry('235x318')
janela.configure(bg=co1)
janela.mainloop()
Muito bem, após isto iremos definir um estilo para a nossa janela , usando o ttk.
ttk.Separator(janela, orient=HORIZONTAL).grid(row=0, columnspan=1, ipadx=280)
Agora a seguir iremos criar a tela que irá mostrar os números que serão inseridos e o resultado de qualquer operação que será realizada.
Para isso, usaremos o Label:
################# Frames ####################
ttk.Separator(janela, orient=HORIZONTAL).grid(row=0, columnspan=1, ipadx=280)
frame_tela = Frame(janela, width=300, height=56,bg=co2, pady=0, padx=0, relief="flat",)
frame_tela.grid(row=1, column=0, sticky=NW)
frame_quadros = Frame(janela, width=300, height=340,bg=fundo, pady=0, padx=0, relief="flat",)
frame_quadros.grid(row=2, column=0, sticky=NW)
################# Label ####################
app_tela = Label(frame_tela,text='123456789',width=16,height=2, padx=7, relief="flat", anchor="e",bd=0, justify=RIGHT, font=('Ivy 18 '), bg='#37474F', fg=co1)
app_tela.place(x=0, y=0)
Agora vamos criar os botões para números e operações:
################# Buttons ####################
b_1 = Button(frame_quadros, text="C", width=11, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_1.place(x=0, y=0)
b_2 = Button(frame_quadros, text="%", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_2.place(x=118, y=0)
b_3 = Button(frame_quadros, text="/", width=5, height=2, bg=co4, fg=co1,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_3.place(x=177, y=0)
b_4 = Button(frame_quadros, text="7", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_4.place(x=0, y=52)
b_5 = Button(frame_quadros, text="8", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_5.place(x=59, y=52)
b_6 = Button(frame_quadros, text="9", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_6.place(x=118, y=52)
b_7 = Button(frame_quadros, text="*", width=5, height=2, bg=co4, fg=co1,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_7.place(x=177, y=52)
b_8 = Button(frame_quadros, text="4", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_8.place(x=0, y=104)
b_9 = Button(frame_quadros, text="5", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_9.place(x=59, y=104)
b_10 = Button(frame_quadros, text="6", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_10.place(x=118, y=104)
b_11 = Button(frame_quadros, text="-", width=5, height=2, bg=co4, fg=co1,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_11.place(x=177, y=104)
b_12 = Button(frame_quadros, text="1", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_12.place(x=0, y=156)
b_13 = Button(frame_quadros, text="2", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_13.place(x=59, y=156)
b_14 = Button(frame_quadros, text="3", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_14.place(x=118, y=156)
b_15 = Button(frame_quadros, text="+", width=5, height=2, bg=co4, fg=co1,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_15.place(x=177, y=156)
b_16 = Button(frame_quadros, text="0", width=11, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_16.place(x=0, y=208)
b_17 = Button(frame_quadros, text=".", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_17.place(x=118, y=208)
b_18 = Button(frame_quadros, text="=", width=5, height=2, bg=co4, fg=co1,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_18.place(x=177, y=208)
Muito bem, depois de criar os botões, vamos agora criar as funções para as operações que serão realizadas em nossa Calculadora
Primeiro, vamos criar a função que nos permitirá inserir números na calculadora, então temos:
Vamos primeiro criar duas variáveis, uma para armazenar os valores que serão digitados e a outra para armazenar um único valor:
#para armazenar todas as expressões que serão avaliadas
todos_valores = ""
# para entrada de valor único
valor_texto = StringVar()
################# Funções ####################
def entrar_valor(event):
global todos_valores
todos_valores = todos_valores + str(event)
valor_texto.set(todos_valores)
Para uma explicação desta função, acesse o vídeo abaixo para maiores esclarecimentos.
Agora, vamos editar a tela Label e passaremos uma nova propriedade para ela.
Exclua a propriedade text, em vez da propriedade text coloca lá textvariable, e mete textvariable=valor_texto.
app_scream = Label(frame_tela,textvariable=valor_texto,width=16,height=2, padx=7, relief="flat", anchor="e",bd=0, justify=RIGHT, font=('Ivy 18 '), bg='#37474F', fg=co1)
app_scream.place(x=0, y=0)
Agora vamos criar a função que nos permitirá avaliar Qualquer expressão, então teremos:
def calcular():
global todos_valores
resultado = str(eval(todos_valores))
valor_texto.set(resultado)
todos_valores = ""
Para a explicação desta função, assista ao vídeo abaixo.
Agora vamos passar a função de inserir valores para todos os botões necessários:
################# Buttons ####################
b_1 = Button(frame_quadros,command = lambda: entrar_valor('%'), text="C", width=11, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_1.place(x=0, y=0)
b_2 = Button(frame_quadros,command = lambda: entrar_valor('%'), text="%", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_2.place(x=118, y=0)
b_3 = Button(frame_quadros,command = lambda: entrar_valor('/'), text="/", width=5, height=2, bg=co4, fg=co1,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_3.place(x=177, y=0)
b_4 = Button(frame_quadros,command = lambda: entrar_valor('7'), text="7", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_4.place(x=0, y=52)
b_5 = Button(frame_quadros,command = lambda: entrar_valor('8'), text="8", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_5.place(x=59, y=52)
b_6 = Button(frame_quadros,command = lambda: entrar_valor('9'), text="9", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_6.place(x=118, y=52)
b_7 = Button(frame_quadros,command = lambda: entrar_valor('*'), text="*", width=5, height=2, bg=co4, fg=co1,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_7.place(x=177, y=52)
b_8 = Button(frame_quadros,command = lambda: entrar_valor('4'), text="4", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_8.place(x=0, y=104)
b_9 = Button(frame_quadros,command = lambda: entrar_valor('5'), text="5", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_9.place(x=59, y=104)
b_10 = Button(frame_quadros,command = lambda: entrar_valor('6'), text="6", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_10.place(x=118, y=104)
b_11 = Button(frame_quadros,command = lambda: entrar_valor('-'), text="-", width=5, height=2, bg=co4, fg=co1,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_11.place(x=177, y=104)
b_12 = Button(frame_quadros,command = lambda: entrar_valor('1'), text="1", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_12.place(x=0, y=156)
b_13 = Button(frame_quadros,command = lambda: entrar_valor('2'), text="2", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_13.place(x=59, y=156)
b_14 = Button(frame_quadros,command = lambda: entrar_valor('3'), text="3", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_14.place(x=118, y=156)
b_15 = Button(frame_quadros,command = lambda: entrar_valor('+'), text="+", width=5, height=2, bg=co4, fg=co1,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_15.place(x=177, y=156)
b_16 = Button(frame_quadros,command = lambda: entrar_valor('0'), text="0", width=11, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_16.place(x=0, y=208)
b_17 = Button(frame_quadros,command = lambda: entrar_valor('.'), text=".", width=5, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_17.place(x=118, y=208)
b_18 = Button(frame_quadros,command = lambda: entrar_valor('='), text="=", width=5, height=2, bg=co4, fg=co1,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_18.place(x=177, y=208)
Onde temos o sinal de igual, colocaremos a função calcular:
b_18 = Button(frame_quadros,command = lambda: calcular(), text="=", width=5, height=2, bg=co4, fg=co1,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_18.place(x=177, y=208)
Agora finalmente criaremos a função que nos permitirá limpar a tela, então teremos:
def limpar_tela():
global todos_valores
todos_valores = ""
valor_texto.set("")
Para uma explicação desta função, assista ao vídeo abaixo.
Agora vamos mover essa mesma função para onde temos a letra C, que significa claro:
b_1 = Button(frame_quadros,command = lambda: limpar_tela(), text="C", width=11, height=2, bg=co3, fg=fundo,font=('Ivy 13 bold'),relief=RAISED, overrelief=RIDGE)
b_1.place(x=0, y=0)
Muito bem, assim encerramos nosso aplicativo, para melhores esclarecimentos, assista ao Vídeo abaixo, qualquer dúvida, comente que irei ao seu encontro.
0 Comentários