Calcular a percentagem de ocupação

from tkinter import *


def apenas_numeros(texto):
return texto.isdigit() or texto == ""

def classificar_ocupacao(percentagem):
if percentagem <= 25:
return "Muito baixa", "#8B0000"
elif percentagem <= 50:
return "Baixa", "#FF6347"
elif percentagem <= 75:
return "Média", "#FFFACD"
elif percentagem <= 90:
return "Alta", "#90EE90"
else:
return "Muito alta", "#006400"

def limpar():
Numero_camas_ocupadas_entrada.delete(0, END)
Numero_total_entrada.delete(0, END)
resultado_texto.config(text="", bg="#cfe2f3")
Numero_total_entrada.focus()

def app():
try:
total = int(Numero_total.get())
ocupadas = int(Numero_camas_ocupadas.get())

if total <= 0:
mensagem = "O número total de camas deve ser maior que zero."
cor = "#cfe2f3"
elif ocupadas > total:
mensagem = "As camas ocupadas não podem ser maiores que o total."
cor = "#cfe2f3"
else:
percentagem = (ocupadas / total) * 100
classificacao, cor = classificar_ocupacao(percentagem)
mensagem = (
f"Taxa de ocupação: {percentagem:.2f}%\n"
f"Classificação: {classificacao}"
)

resultado_texto.config(text=mensagem, bg=cor)

except ValueError:
resultado_texto.config(
text="Por favor, insira apenas números inteiros.",
bg="#cfe2f3"
)

root = Tk()
root.geometry("700x400")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Calcular a percentagem de ocupação")

vcmd = root.register(apenas_numeros) # Validação de números

# Título
titulo = Label(
root,
text="Calcular a percentagem de ocupação",
font=("Arial", 28, "bold"),
bg="#103030",
fg="#49e3e3"
)
titulo.place(relx=0.03, rely=0.05)

# Labels
Label(
root,
text="Número total de camas:",
font=("Arial", 18, "bold"),
bg="#103030",
fg="#49e3e3"
).place(relx=0.09, rely=0.25)

Label(
root,
text="Número de camas ocupadas:",
font=("Arial", 18, "bold"),
bg="#103030",
fg="#49e3e3"
).place(relx=0.05, rely=0.43)

Numero_total = StringVar()
Numero_total_entrada = Entry(
root,
textvariable=Numero_total,
font=("Arial", 12, "bold"),
justify='center',
validate="key",
validatecommand=(vcmd, "%P")
)
Numero_total_entrada.place(relx=0.6, rely=0.26, relwidth=0.35)
Numero_total_entrada.focus()

Numero_camas_ocupadas = StringVar()
Numero_camas_ocupadas_entrada = Entry(
root,
textvariable=Numero_camas_ocupadas,
font=("Arial", 12, "bold"),
justify='center',
validate="key",
validatecommand=(vcmd, "%P")
)
Numero_camas_ocupadas_entrada.place(relx=0.6, rely=0.43, relwidth=0.35)


root.bind("<Return>", lambda event: app())

Button(
root, text="Calcular", bg='#107db2', fg='white',
font=('Verdana', 12, 'bold'), command=app
).place(relx=0.1, rely=0.65, relwidth=0.25, relheight=0.1)

Button(
root, text="Limpar", bg='#107db2', fg='white',
font=('Verdana', 12, 'bold'), command=limpar
).place(relx=0.4, rely=0.65, relwidth=0.25, relheight=0.1)

Button(
root, text="Sair", bg='#107db2', fg='white',
font=('Verdana', 12, 'bold'), command=root.destroy
).place(relx=0.7, rely=0.65, relwidth=0.25, relheight=0.1)

resultado_texto = Label(
root, text="", font=("Arial", 14, "bold"), bg="#cfe2f3"
)
resultado_texto.place(relx=0.05, rely=0.8, relwidth=0.9, relheight=0.15)

root.mainloop()

Comentários

Mensagens populares deste blogue

Criar Cartões de Visita

12 signos egípcios