Aprenda Python: Criando uma Calculadora com Tkinter

POR CÓDIGO DA HORA • 24 ABRIL 2025

O que é o Tkinter?

Tkinter é a biblioteca padrão do Python para criação de interfaces gráficas (GUI). Com ele, você pode criar janelas, botões e campos de entrada nativos do sistema operacional de forma simples e eficiente.

Projeto: Calculadora Completa

Vamos construir uma interface onde o usuário pode clicar nos números e operadores para realizar cálculos matemáticos reais utilizando o gerenciador de layout grid.

import tkinter as tk

def clicar(botao):
    """Adiciona o valor do botão ao campo de entrada."""
    atual = entrada.get()
    if atual == "Erro":
        entrada.delete(0, tk.END)
    entrada.insert(tk.END, str(botao))

def limpar():
    """Limpa o campo de entrada."""
    entrada.delete(0, tk.END)

def calcular():
    """Avalia a expressão matemática no campo de entrada."""
    try:
        resultado = eval(entrada.get())
        entrada.delete(0, tk.END)
        entrada.insert(0, str(resultado))
    except Exception:
        entrada.delete(0, tk.END)
        entrada.insert(0, "Erro")

# Configuração da Janela
janela = tk.Tk()
janela.title("Calculadora Código da Hora")
janela.resizable(False, False)

# Campo de Entrada (Visor)
entrada = tk.Entry(janela, width=16, font=('Arial', 24), borderwidth=5, relief="flat", justify='right')
entrada.grid(row=0, column=0, columnspan=4, padx=10, pady=20)

# Lista de botões: (Texto, Linha, Coluna)
botoes = [
    ('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3),
    ('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3),
    ('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3),
    ('C', 4, 0), ('0', 4, 1), ('=', 4, 2), ('+', 4, 3),
]

# Criação dinâmica dos botões
for (texto, linha, coluna) in botoes:
    if texto == '=':
        comando = calcular
    elif texto == 'C':
        comando = limpar
    else:
        comando = lambda t=texto: clicar(t)
    
    tk.Button(janela, text=texto, width=5, height=2, font=('Arial', 14, 'bold'),
              command=comando).grid(row=linha, column=coluna, sticky="nsew", padx=2, pady=2)

janela.mainloop()

Destaques do Código:

  • Grid Layout: Organiza os botões em uma matriz de linhas e colunas.
  • Função eval(): Interpreta a string do visor como uma expressão matemática real.
  • Lambda: Permite passar argumentos para as funções dos botões sem executá-las imediatamente.