Como construir uma calculadora no Tkinter

Python fornece muitas ferramentas para ciência de dados, web e desenvolvimento de Android. Mas uma das melhores ferramentas quando se trata da linguagem de programação Python é o Tkinter for Graphical User Interface. A biblioteca Tkinter em python fornece widgets GUI que ajudam a criar aplicativos amigáveis ​​ao usuário. O Tkinter é fácil de usar, leve e rápido. Você não precisa instalar o Tkinter explicitamente, pois ele vem pré-instalado com o Python.

Você deve saber os fundamentos do pacote Tkinter em Python antes de prosseguir com este tutorial.

Configuração básica para o aplicativo

1. Importando o módulo

A primeira etapa para construir o aplicativo é importar o módulo. Ao importar o módulo Tkinter, você precisará instanciar o objeto ttk .

 import tkinter as ttk

2. Criação da variável de janela

Para criar uma janela, você precisa criar um objeto de janela usando ttk . Depois de criar um objeto de janela, você pode atribuir um título e uma geometria à janela. A geometria irá definir a altura e largura da janela.

 win = ttk.Tk()
win.title('Simple Calculator')
win.geometry('500x500')

3. MainLoop

O método mainloop () executa a janela em um loop infinito. Ele é executado continuamente, a menos que o usuário feche a janela manualmente.

 win.mainloop()

Relacionado: Comece a criar aplicativos de área de trabalho em Python com a biblioteca de GUI do Tkinter

Construindo a IU

O pacote Tkinter em Python tem muitos widgets que ajudam a fazer designs amigáveis ​​ao usuário. Os widgets usados ​​neste projeto são botões e campos de texto . Para este projeto, você precisa dos seguintes botões: 0-9 números, somar , subtrair , multiplicação , divisão , limpar , deletar , calcular .

 oneButton = ttk.Button(win, text="1", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(1))
oneButton.grid(row=2, column=0,padx=2, pady=3)
twoButton = ttk.Button(win, text="2", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(2))
twoButton.grid(row=2, column=1, padx=2, pady=3)
threeButton = ttk.Button(win, text="3", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(3))
threeButton.grid(row=2, column=2, padx=2, pady=3)
plusButton = ttk.Button(win, text="+", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq("+"))
plusButton.grid(row=2, column=3, padx=2, pady=3)
# div 2
fourButton = ttk.Button(win, text="4", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(4))
fourButton.grid(row=3, column=0, padx=2, pady=3)
fiveButton = ttk.Button(win, text="5", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(5))
fiveButton.grid(row=3, column=1, padx=2, pady=3)
sixButton = ttk.Button(win, text="6", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(6))
sixButton.grid(row=3, column=2, padx=2, pady=3)
minusButton = ttk.Button(win, text="-", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq("-"))
minusButton.grid(row=3, column=3, padx=2, pady=3)
# div 3
sevenButton = ttk.Button(win, text="7", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(7))
sevenButton.grid(row=4, column=0, padx=2, pady=3)
eightButton = ttk.Button(win, text="8", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(8))
eightButton.grid(row=4, column=1, padx=2, pady=3)
nineButton = ttk.Button(win, text="9", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(9))
nineButton.grid(row=4, column=2, padx=2, pady=3)
muxButton = ttk.Button(win, text="x", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq("*"))
muxButton.grid(row=4, column=3, padx=2, pady=3)
#div 4
zeroButton = ttk.Button(win, text="0", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(0))
zeroButton.grid(row=5, column=0, padx=2, pady=3)
clearButton = ttk.Button(win, text="clr", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=clearInput)
clearButton.grid(row=5, column=1, padx=2, pady=3)
calculateButton = ttk.Button(win, text="cal", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=calculateEq)
calculateButton.grid(row=5, column=2, padx=2, pady=3)
divideButton = ttk.Button(win, text="/", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq("/"))
divideButton.grid(row=5, column=3, padx=2, pady=3)

O widget de botão aceita muitos argumentos: o objeto da janela, o texto exibido no botão, o estilo da fonte, etc. Ele também aceita um argumento de comando que executa uma função ou método ao clicar no botão.

Para alinhar botões em linhas e colunas para uma interface de usuário amigável, use o atributo grid . O atributo grid aceita o número da linha e o número da coluna como argumentos para alinhar os botões de acordo.

 numericEq = ttk.StringVar()
dataField = ttk.Entry(win, textvariable=numericEq, font="Serif 15")
dataField.grid(row=0,columnspan=3, ipadx=80, ipady=15)

O widget de entrada é a caixa de texto no pacote Python Tkinter. Normalmente, o campo Entry aceita muitos argumentos – mas um dos argumentos mais cruciais e obrigatórios é textvariable . O usuário pode digitar no campo de entrada devido a este argumento. No código acima, uma variável chamada numericEq é atribuída a um atributo ttk.StringVar () para gerenciar o widget de entrada .

Relacionado: Aprendendo Python? Veja como manipular strings

Você pode executar o arquivo Python usando o comando python file_name.py . O aplicativo tem a seguinte aparência:

Adicionando funcionalidade aos botões:

Como mencionamos anteriormente, o widget Button tem um atributo de comando que aceita uma função ou método a ser chamado. Os métodos passados ​​quando os botões são clicados usam a função lambda .

1. Botões numéricos e aritméticos

Os botões numéricos consistem em valores de 0-9 e os botões aritméticos são +, -, x, / para fins de cálculo.

O método addToEq () é chamado ao clicar no botão. Este método passa números ou operadores aritméticos dependendo do botão que você clicar. Depois de passar o valor, os números ou operadores são armazenados na variável calcValue . Antes de armazenar o valor ou operador na variável calcValue , você deve convertê-lo para o tipo de string usando o método str () .

 def addToEq(x):
calcValue = calcValue + str(x)
numericEq.set(calcValue)

2. Botões de cálculo

O botão com o rótulo cal calcula toda a string armazenada na variável calcValue . A função eval () ajuda a realizar operações aritméticas na variável calcValue e retornar o total. Depois de recuperar o valor, defina o valor total na variável numericEq . A variável numericEq exibe esse valor na caixa de entrada .

 def calculateEq():
total = str(eval(calcValue))
numericEq.set(total)

3. Botão Limpar

O botão limpar limpa a caixa de entrada . Ao clicar no botão limpar , o método clearInput () é chamado. A variável calcValue é definida como uma string vazia e é armazenada na caixa de entrada .

 def clearInput():
calcValue = ""
numericEq.set("")

Depois de implementar todos esses métodos, a saída do código fica assim:

Projetos são a melhor maneira de melhorar suas habilidades de codificação

Agora que você aprendeu como construir uma calculadora simples usando GUI no Python Tkinter, é hora de explorar outros pacotes Python. Python tem uma variedade de pacotes que o ajudam a construir qualquer aplicativo que você possa imaginar.

Como você provavelmente já sabe, os projetos são a melhor maneira de mostrar suas habilidades. Os projetos de construção o ajudarão a ter um bom domínio da linguagem e a construir seu currículo.