Mundo em Python

Calcular m² (versão melhorada)

from tkinter import *
import math def converter_para_metros(valor, unidade):
if unidade == "mm":
return valor / 1000
elif unidade == "cm":
return valor / 100
elif unidade == "m":
return valor
else:
return None


def calcular_area_retangulo(largura, comprimento):
return largura * comprimento
def calcular_area_circulo(raio):
return math.pi * raio ** 2


def calcular_area_triangulo(base, altura):
return (base * altura) / 2


def calcular_area_trapezio(base_maior, base_menor, altura):
return ((base_maior + base_menor) * altura) / 2


def calcular_area_losango(diagonal_maior, diagonal_menor):
return (diagonal_maior * diagonal_menor) / 2

root = Tk()
root.geometry("700x650")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Calcular m²") titulo = Label(text="Calcular m²",
font=("Arial", 30, "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.35, rely=0.05) texto_sub1 = Label(text="Escolha a forma geométrica:",
font=("Arial", 18, "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.05, rely=0.2) var_forma = StringVar()
formas = ["Retângulo", "Círculo", "Triângulo", "Trapézio", "Losango"]
dropdown = OptionMenu(root, var_forma, *formas)
var_forma.set(formas[0])
dropdown.place(relx=0.55, rely=0.22, relwidth=0.35)
dropdown.config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 20, "bold"))
dropdown["menu"].config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 18, "bold"))
texto_unidade = Label(text="Unidade (mm, cm, m):",
font=("Arial", 18, "bold"), bg="#103030", fg="#49e3e3")
texto_unidade.place(relx=0.05, rely=0.32) var_unidade = StringVar()
unidades = ["mm", "cm", "m"]
dropdown_unidade = OptionMenu(root, var_unidade, *unidades)
var_unidade.set(unidades[2])
dropdown_unidade.place(relx=0.55, rely=0.32, relwidth=0.35)
dropdown_unidade.config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 20, "bold"))
dropdown_unidade["menu"].config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 18, "bold")) entrada1 = Entry(font=("Arial", 14), justify="center")
entrada2 = Entry(font=("Arial", 14), justify="center")
entrada3 = Entry(font=("Arial", 14), justify="center") texto1 = Label(font=("Arial", 16, "bold"), bg="#103030", fg="#49e3e3")
texto2 = Label(font=("Arial", 16, "bold"), bg="#103030", fg="#49e3e3")
texto3 = Label(font=("Arial", 16, "bold"), bg="#103030", fg="#49e3e3")
def atualizar_campos(*args):
for widget in [entrada1, entrada2, entrada3, texto1, texto2, texto3]:
widget.place_forget() forma = var_forma.get() if forma == "Retângulo":
texto1.config(text="Largura:")
texto1.place(relx=0.05, rely=0.45)
entrada1.place(relx=0.55, rely=0.45, relwidth=0.35) texto2.config(text="Comprimento:")
texto2.place(relx=0.05, rely=0.52)
entrada2.place(relx=0.55, rely=0.52, relwidth=0.35) elif forma == "Círculo":
texto1.config(text="Raio:")
texto1.place(relx=0.05, rely=0.45)
entrada1.place(relx=0.55, rely=0.45, relwidth=0.35) elif forma == "Triângulo":
texto1.config(text="Base:")
texto1.place(relx=0.05, rely=0.45)
entrada1.place(relx=0.55, rely=0.45, relwidth=0.35) texto2.config(text="Altura:")
texto2.place(relx=0.05, rely=0.52)
entrada2.place(relx=0.55, rely=0.52, relwidth=0.35) elif forma == "Trapézio":
texto1.config(text="Base maior:")
texto1.place(relx=0.05, rely=0.45)
entrada1.place(relx=0.55, rely=0.45, relwidth=0.35) texto2.config(text="Base menor:")
texto2.place(relx=0.05, rely=0.52)
entrada2.place(relx=0.55, rely=0.52, relwidth=0.35) texto3.config(text="Altura:")
texto3.place(relx=0.05, rely=0.59)
entrada3.place(relx=0.55, rely=0.59, relwidth=0.35) elif forma == "Losango":
texto1.config(text="Diagonal maior:")
texto1.place(relx=0.05, rely=0.45)
entrada1.place(relx=0.55, rely=0.45, relwidth=0.35) texto2.config(text="Diagonal menor:")
texto2.place(relx=0.05, rely=0.52)
entrada2.place(relx=0.55, rely=0.52, relwidth=0.35)
def calcular():
try:
forma = var_forma.get()
unidade = var_unidade.get() if forma == "Retângulo":
largura = float(entrada1.get())
comprimento = float(entrada2.get())
largura_m = converter_para_metros(largura, unidade)
comprimento_m = converter_para_metros(comprimento, unidade)
area = calcular_area_retangulo(largura_m, comprimento_m) elif forma == "Círculo":
raio = float(entrada1.get())
raio_m = converter_para_metros(raio, unidade)
area = calcular_area_circulo(raio_m) elif forma == "Triângulo":
base = float(entrada1.get())
altura = float(entrada2.get())
base_m = converter_para_metros(base, unidade)
altura_m = converter_para_metros(altura, unidade)
area = calcular_area_triangulo(base_m, altura_m) elif forma == "Trapézio":
base_maior = float(entrada1.get())
base_menor = float(entrada2.get())
altura = float(entrada3.get())
base_maior_m = converter_para_metros(base_maior, unidade)
base_menor_m = converter_para_metros(base_menor, unidade)
altura_m = converter_para_metros(altura, unidade)
area = calcular_area_trapezio(base_maior_m, base_menor_m, altura_m) elif forma == "Losango":
diag_maior = float(entrada1.get())
diag_menor = float(entrada2.get())
diag_maior_m = converter_para_metros(diag_maior, unidade)
diag_menor_m = converter_para_metros(diag_menor, unidade)
area = calcular_area_losango(diag_maior_m, diag_menor_m) else:
resultado_texto.config(text="Erro: forma inválida.")
return

resultado_texto.config(text=f"A área é {area:.2f} m²") except ValueError:
resultado_texto.config(text="Erro: insira valores numéricos.")
def limpar():
entrada1.delete(0, END)
entrada2.delete(0, END)
entrada3.delete(0, END)
resultado_texto.config(text="")
but1 = Button(text="Calcular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=calcular)
but1.place(relx=0.1, rely=0.72, relwidth=0.25, relheight=0.1) but_limpar = Button(text="Limpar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=limpar)
but_limpar.place(relx=0.4, rely=0.72, relwidth=0.25, relheight=0.1) but_sair = Button(text="Sair", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=root.destroy)
but_sair.place(relx=0.7, rely=0.72, relwidth=0.25, relheight=0.1) resultado_texto = Label(text="", font=("Arial", 14, "bold"), bg="#cfe2f3")
resultado_texto.place(relx=0.05, rely=0.85, relwidth=0.9, relheight=0.12) var_forma.trace("w", atualizar_campos)
atualizar_campos() root.mainloop()
0