from tkinter import *
def calcular_autonomia(capacidade_kwh, consumo_kw, eficiencia):
if consumo_kw <= 0:
return 0
energia_util = capacidade_kwh * eficiencia
tempo_horas = energia_util / consumo_kw
return tempo_horas
def calcular_distancia(tempo_horas, velocidade_kmh):
return tempo_horas * velocidade_kmh
def limpar():
Velocidade_media_entrada.delete(0, END)
Eficiencia_sistema_entrada.delete(0, END)
Capacidade_bateria_entrada.delete(0, END)
Consumo_motor_entrada.delete(0, END)
resultado_texto.config(text="")
def simular():
try:
velocidade = float(Velocidade_media.get())
capacidade = float(Capacidade_bateria.get())
consumo = float(Consumo_motor.get())
eficiencia = float(Eficiencia_sistema.get())
if eficiencia < 0 or eficiencia > 1:
mensagem = "A eficiência deve estar entre 0 e 1."
elif consumo <= 0:
mensagem = "O consumo deve ser maior que 0."
elif capacidade <= 0:
mensagem = "A capacidade deve ser maior que 0."
elif velocidade < 0:
mensagem = "A velocidade não pode ser negativa."
else:
tempo = calcular_autonomia(capacidade, consumo, eficiencia)
distancia = calcular_distancia(tempo, velocidade)
mensagem = (
"=== RESULTADOS ===\n"
f"Autonomia: {tempo:.2f} horas\n"
f"Distância estimada: {distancia:.2f} km"
)
resultado_texto.config(text=mensagem)
except ValueError:
resultado_texto.config(text="❌ Erro: introduza valores numéricos válidos.")
root = Tk()
root.geometry("800x600")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Simulador de Consumo - Barco Elétrico")
# Título
titulo = Label(
text="Simulador de Consumo - Barco Elétrico",
font=("Arial", 25, "bold"),
bg="#103030",
fg="#49e3e3"
)
titulo.place(relx=0.1, rely=0.05)
# Labels
Label(root, text="Capacidade da bateria (kWh):",
font=("Arial", 16, "bold"), bg="#103030", fg="#49e3e3").place(relx=0.18, rely=0.2)
Label(root, text="Consumo do motor (kW):",
font=("Arial", 16, "bold"), bg="#103030", fg="#49e3e3").place(relx=0.23, rely=0.35)
Label(root, text="Eficiência do sistema (0-1):",
font=("Arial", 16, "bold"), bg="#103030", fg="#49e3e3").place(relx=0.18, rely=0.5)
Label(root, text="Velocidade média (km/h):",
font=("Arial", 16, "bold"), bg="#103030", fg="#49e3e3").place(relx=0.23, rely=0.65)
Capacidade_bateria = StringVar()
Consumo_motor = StringVar()
Eficiencia_sistema = StringVar()
Velocidade_media = StringVar()
Capacidade_bateria_entrada = Entry(root, textvariable=Capacidade_bateria,
font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Capacidade_bateria_entrada.place(relx=0.65, rely=0.21, relwidth=0.3)
Consumo_motor_entrada = Entry(root, textvariable=Consumo_motor,
font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Consumo_motor_entrada.place(relx=0.65, rely=0.36, relwidth=0.3)
Eficiencia_sistema_entrada = Entry(root, textvariable=Eficiencia_sistema,
font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Eficiencia_sistema_entrada.place(relx=0.65, rely=0.51, relwidth=0.3)
Velocidade_media_entrada = Entry(root, textvariable=Velocidade_media,
font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Velocidade_media_entrada.place(relx=0.65, rely=0.66, relwidth=0.3)
Button(root, text="Simular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=simular)\
.place(relx=0.1, rely=0.75, relwidth=0.25, relheight=0.08)
Button(root, text="Limpar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=limpar)\
.place(relx=0.4, rely=0.75, relwidth=0.25, relheight=0.08)
Button(root, text="Sair", bd=2, 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_texto = Label(
root,
text="",
font=("Arial", 14, "bold"),
bg="#49e3e3",
fg="#103030",
justify="left"
)
resultado_texto.place(relx=0.05, rely=0.85, relwidth=0.9, relheight=0.1)
root.mainloop()