from tkinter import *
root = Tk()
root.geometry("650x600")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Simulador de potência de voo")
# Título
titulo = Label(
text="Simulador de potência de voo",
font=("Arial", 22, "bold"),
bg="#103030",
fg="#49e3e3"
)
titulo.place(relx=0.05, rely=0.03)
# Entradas
labels = [
"Massa (kg)",
"Velocidade vertical (m/s)",
"Velocidade horizontal (m/s)",
"Área da asa (m²)",
"Coeficiente de arrasto (Cd)"
]
vars_list = []
entries = []
for i, txt in enumerate(labels):
Label(
text=txt,
font=("Arial", 12, "bold"),
bg="#103030",
fg="#49e3e3"
).place(relx=0.05, rely=0.15 + i*0.1)
var = StringVar()
entry = Entry(
textvariable=var,
font=("Arial", 12),
justify='center'
)
entry.place(relx=0.55, rely=0.15 + i*0.1, relwidth=0.35)
vars_list.append(var)
entries.append(entry)
# Foco inicial
entries[0].focus()
# Cálculo
def calcular():
try:
if any(v.get() == "" for v in vars_list):
resultado.config(text="Preenche todos os campos.")
return
m = float(vars_list[0].get())
v_vertical = float(vars_list[1].get())
v_horizontal = float(vars_list[2].get())
S = float(vars_list[3].get())
Cd = float(vars_list[4].get())
g = 9.81
rho = 1.225 # densidade do ar
# Potência de subida
P_subida = m * g * v_vertical
# Arrasto
D = 0.5 * rho * (v_horizontal ** 2) * S * Cd
P_arrasto = D * v_horizontal
# Total
P_total = P_subida + P_arrasto
texto = (
f"Potência de subida: {P_subida:.2f} W\n"
f"Potência de arrasto: {P_arrasto:.2f} W\n"
f"-----------------------------\n"
f"Potência total: {P_total:.2f} W\n"
f"{P_total/1000:.2f} kW"
)
resultado.config(text=texto)
except ValueError:
resultado.config(text="Valores inválidos.")
# Limpar
def limpar():
for v in vars_list:
v.set("")
resultado.config(text="")
# Botões
Button(
text="Calcular",
bg="#107db2",
fg="white",
font=("verdana", 12, "bold"),
command=calcular
).place(relx=0.1, rely=0.75, relwidth=0.3, relheight=0.08)
Button(
text="Limpar",
bg="#107db2",
fg="white",
font=("verdana", 12, "bold"),
command=limpar
).place(relx=0.4, rely=0.75, relwidth=0.3, relheight=0.08)
Button(
text="Sair",
bg="#107db2",
fg="white",
font=("verdana", 12, "bold"),
command=root.destroy
).place(relx=0.7, rely=0.75, relwidth=0.25, relheight=0.08)
# Resultado
resultado = Label(
text="",
font=("Arial", 12, "bold"),
bg="#cfe2f3",
justify="center"
)
resultado.place(relx=0.05, rely=0.88, relwidth=0.9, relheight=0.1)
root.mainloop()