from tkinter import *
root = Tk()
root.geometry("700x700")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Calcular Combustível Barco")
# Título
titulo = Label(text="Calcular Combustível Barco",
font=("Arial", "28", "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.18, rely=0.05)
# Labels
texto_sub1 = Label(text="Distância da viagem (milhas náuticas):",
font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.05, rely=0.15)
texto_sub2 = Label(text="Velocidade média (nós):",
font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub2.place(relx=0.23, rely=0.25)
texto_sub3 = Label(text="Consumo médio do motor (l/h):",
font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub3.place(relx=0.15, rely=0.35)
texto_sub4 = Label(text="Combustível disponível no tanque (l):",
font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub4.place(relx=0.08, rely=0.45)
texto_sub5 = Label(text="Há vento?",
font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub5.place(relx=0.45, rely=0.55)
texto_sub6 = Label(text="Paragens durante a viagem:",
font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub6.place(relx=0.23, rely=0.65)
texto_sub7 = Label(text="Tempo por parada (min):",
font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub7.place(relx=0.23, rely=0.75)
var = StringVar()
dropDownList = ["A favor", "Contra", "Nenhum"]
dropdown = OptionMenu(root, var, *dropDownList)
var.set(dropDownList[0])
dropdown.place(relx=0.63, rely=0.56, relwidth=0.3)
dropdown.config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 12, "bold"))
dropdown["menu"].config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 12, "bold"))
# Entradas
Distância_viagem = StringVar()
Distância_viagem_entrada = Entry(textvariable=Distância_viagem, font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Distância_viagem_entrada.place(relx=0.63, rely=0.16, relwidth=0.3)
Distância_viagem_entrada.focus()
Velocidade_média = StringVar()
Velocidade_média_entrada = Entry(textvariable=Velocidade_média, font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Velocidade_média_entrada.place(relx=0.63, rely=0.26, relwidth=0.3)
Consumo_médio_motor = StringVar()
Consumo_médio_motor_entrada = Entry(textvariable=Consumo_médio_motor, font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Consumo_médio_motor_entrada.place(relx=0.63, rely=0.36, relwidth=0.3)
Combustível_disponível_tanque = StringVar()
Combustível_disponível_tanque_entrada = Entry(textvariable=Combustível_disponível_tanque, font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Combustível_disponível_tanque_entrada.place(relx=0.63, rely=0.46, relwidth=0.3)
Paragens = StringVar()
Paragens_entrada = Entry(textvariable=Paragens, font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Paragens_entrada.place(relx=0.63, rely=0.66, relwidth=0.3)
Tempo_parada = StringVar()
Tempo_parada_entrada = Entry(textvariable=Tempo_parada, font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Tempo_parada_entrada.place(relx=0.63, rely=0.76, relwidth=0.3)
# Resultado com Scroll
frame_resultado = Frame(root)
frame_resultado.place(relx=0.05, rely=0.85, relwidth=0.9, relheight=0.12)
scrollbar = Scrollbar(frame_resultado)
scrollbar.pack(side=RIGHT, fill=Y)
resultado_texto = Text(frame_resultado, font=("Arial", 12, "bold"), bg="#cfe2f3",
yscrollcommand=scrollbar.set, wrap=WORD)
resultado_texto.pack(side=LEFT, fill=BOTH, expand=True)
scrollbar.config(command=resultado_texto.yview)
# Funções
def limpar():
Distância_viagem_entrada.delete(0, END)
Velocidade_média_entrada.delete(0, END)
Consumo_médio_motor_entrada.delete(0, END)
Combustível_disponível_tanque_entrada.delete(0, END)
Paragens_entrada.delete(0, END)
Tempo_parada_entrada.delete(0, END)
resultado_texto.delete("1.0", END)
def app():
try:
velocidade = float(Velocidade_média.get())
distancia = float(Distância_viagem.get())
consumo = float(Consumo_médio_motor.get())
tanque = float(Combustível_disponível_tanque.get())
if velocidade <= 0:
resultado_texto.delete("1.0", END)
resultado_texto.insert(END, "Velocidade inválida. Simulação cancelada.")
return
# Ajuste por vento
vento = var.get().lower()
if vento == "a favor":
velocidade += 1.5
elif vento == "contra":
velocidade -= 1.5
if velocidade <= 0:
resultado_texto.delete("1.0", END)
resultado_texto.insert(END, "Velocidade final inválida após ajuste do vento.")
return
tempo_viagem = distancia / velocidade
paragens = int(Paragens.get()) if Paragens.get() else 0
tempo_parada_min = float(Tempo_parada.get()) if Tempo_parada.get() else 0
tempo_total = tempo_viagem + (paragens * (tempo_parada_min / 60))
combustivel_necessario = tempo_viagem * consumo
combustivel_restante = tanque - combustivel_necessario
mensagem = f"\nResultado da Simulação:\n" \
f"Tempo estimado de viagem (sem paradas): {tempo_viagem:.2f} horas\n" \
f"Tempo total com paradas: {tempo_total:.2f} horas\n" \
f"Combustível necessário: {combustivel_necessario:.2f} litros\n" \
f"Combustível restante após a viagem: {combustivel_restante:.2f} litros"
if combustivel_restante < 0:
alerta = "⚠ Atenção:NÃO tem combustível suficiente para essa viagem!"
else:
alerta = "✅ Combustível suficiente para a viagem."
resultado_texto.delete("1.0", END)
resultado_texto.insert(END, mensagem + "\n\n" + alerta)
except ValueError:
resultado_texto.delete("1.0", END)
resultado_texto.insert(END, " Por favor, preencha todos os campos com valores numéricos válidos.")
# Botões
but1 = Button(text="Calcular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=app)
but1.place(relx=0.1, rely=0.8, relwidth=0.25, relheight=0.05)
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.8, relwidth=0.25, relheight=0.05)
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.8, relwidth=0.25, relheight=0.05)
root.bind('<Return>', lambda event: app())
root.mainloop()
Comentários
Enviar um comentário