from tkinter import *
# Função para calcular o Nutri-Score
def calcular_nutri_score():
try:
# Obtendo os valores das entradas
energia = int(Energia.get())
gorduras_saturadas = int(Gorduras_Saturadas.get())
acucares = int(Açúcar.get())
sodio = int(Sodio.get())
fibras = float(Fibras.get())
proteinas = float(Proteínas.get())
frutas_legumes = float(Frutas_Legumes.get())
# Calculando pontuações negativas
pontos_energia = min(10, energia // 335)
pontos_acucares = min(10, acucares // 4.5)
pontos_gorduras_saturadas = min(10, gorduras_saturadas // 1)
pontos_sodio = min(10, sodio // 90)
pontos_negativos = pontos_energia + pontos_acucares + pontos_gorduras_saturadas + pontos_sodio
# Calculando pontuações positivas
if frutas_legumes > 80:
pontos_frutas_legumes = 5
elif frutas_legumes > 60:
pontos_frutas_legumes = 2
elif frutas_legumes > 40:
pontos_frutas_legumes = 1
else:
pontos_frutas_legumes = 0
pontos_fibras = min(5, fibras // 0.9)
pontos_proteinas = min(5, proteinas // 1.6)
pontos_positivos = pontos_frutas_legumes + pontos_fibras + pontos_proteinas
# Ajuste da pontuação de proteínas
if pontos_negativos >= 11 and pontos_frutas_legumes == 5:
pontos_positivos -= pontos_proteinas
# Cálculo da pontuação final
pontuacao_final = pontos_negativos - pontos_positivos
# Determinação do Nutri-Score
if pontuacao_final <= -1:
nutri_score = "Nota A: Indica que o produto tem a melhor qualidade nutricional\n" \
"dentro da categoria e deve ser preferido."
elif pontuacao_final <= 2:
nutri_score = "Nota B: Indica uma boa qualidade nutricional,\n" \
"mas não tão boa quanto a de um produto classificado como 'A'."
elif pontuacao_final <= 10:
nutri_score = "Nota C: Reflete uma qualidade nutricional média.\n" \
"É uma escolha aceitável, mas existem opções mais saudáveis."
elif pontuacao_final <= 18:
nutri_score = "Nota D: Indica uma qualidade nutricional pobre.\n" \
"Deve ser consumido com moderação."
else:
nutri_score = "Nota E: Reflete a pior qualidade nutricional dentro da categoria,\n" \
"sugerindo que o consumo deve ser limitado."
# Exibindo o resultado
resultado_texto.config(state=NORMAL) # Permite modificar o conteúdo
resultado_texto.delete(1.0, END) # Limpar o conteúdo existente
resultado_texto.insert(INSERT, f"Nutri-Score: {nutri_score}")
resultado_texto.config(state=DISABLED) # Desativa a edição
except ValueError:
resultado_texto.config(state=NORMAL) # Permite modificar o conteúdo
resultado_texto.delete(1.0, END)
resultado_texto.insert(INSERT, "Por favor, insira todos os valores corretamente.")
resultado_texto.config(state=DISABLED) # Desativa a edição
resultado_texto.config(bg="red")
# Função para limpar as entradas
def limpar():
Energia_entrada.delete(0, END)
Gorduras_Saturadas_entrada.delete(0, END)
frutas_legumes_entrada.delete(0, END)
Proteínas_entrada.delete(0, END)
Fibras_entrada.delete(0, END)
Sodio_entrada.delete(0, END)
Açúcar_entrada.delete(0, END)
resultado_texto.config(state=NORMAL)
resultado_texto.delete(1.0, END)
resultado_texto.config(state=DISABLED)
resultado_texto.config(bg="#cfe2f3")
# Configuração da janela principal
root = Tk()
root.geometry("700x600")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Calcular Nutri-Score")
# Título e subtítulos
titulo = Label(text="Calcular Nutri-Score",
font=("Arial", "35", "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.2, rely=0.05)
texto_sub1 = Label(text="Calcular por 100g de produto",
font=("Arial", "18", "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.25, rely=0.2)
# Entradas de dados
texto_sub3 = Label(text="Energia (em kJ)",
font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub3.place(relx=0.05, rely=0.35)
Energia = StringVar()
Energia_entrada = Entry(textvariable=Energia,
font=("Arial", "12", "bold"), bg="white", fg="blue", justify='center')
Energia_entrada.place(relx=0.35, rely=0.36, relwidth=0.13)
Energia_entrada.focus()
texto_sub4 = Label(text="Açúcar (em gramas)",
font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub4.place(relx=0.53, rely=0.35)
Açúcar = StringVar()
Açúcar_entrada = Entry(textvariable=Açúcar,
font=("Arial", "12", "bold"), bg="white", fg="blue", justify='center')
Açúcar_entrada.place(relx=0.83, rely=0.36, relwidth=0.13)
texto_sub5 = Label(text="Gorduras Saturadas (em g)",
font=("Arial", "13", "bold"), bg="#103030", fg="#49e3e3")
texto_sub5.place(relx=0.02, rely=0.45)
Gorduras_Saturadas = StringVar()
Gorduras_Saturadas_entrada = Entry(textvariable=Gorduras_Saturadas,
font=("Arial", "12", "bold"), bg="white", fg="blue", justify='center')
Gorduras_Saturadas_entrada.place(relx=0.35, rely=0.45, relwidth=0.13)
texto_sub6 = Label(text="Sódio (em mg)", font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub6.place(relx=0.53, rely=0.45)
Sodio = StringVar()
Sodio_entrada = Entry(textvariable=Sodio, font=("Arial", "12", "bold"), bg="white", fg="blue", justify='center')
Sodio_entrada.place(relx=0.83, rely=0.45, relwidth=0.13)
texto_sub7 = Label(text="Fibras (em g)", font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub7.place(relx=0.05, rely=0.55)
Fibras = StringVar()
Fibras_entrada = Entry(textvariable=Fibras, font=("Arial", "12", "bold"), bg="white", fg="blue", justify='center')
Fibras_entrada.place(relx=0.35, rely=0.55, relwidth=0.13)
texto_sub8 = Label(text="Proteínas (em g)", font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub8.place(relx=0.53, rely=0.55)
Proteínas = StringVar()
Proteínas_entrada = Entry(textvariable=Proteínas, font=("Arial", "12", "bold"),
bg="white", fg="blue", justify='center')
Proteínas_entrada.place(relx=0.83, rely=0.55, relwidth=0.13)
texto_sub9 = Label(text="Frutas, legumes e oleaginosas (em %)",
font=("Arial", "15", "bold"), bg="#103030", fg="#49e3e3")
texto_sub9.place(relx=0.05, rely=0.65)
Frutas_Legumes = StringVar()
frutas_legumes_entrada = Entry(textvariable=Frutas_Legumes,
font=("Arial", "12", "bold"), bg="white", fg="blue", justify='center')
frutas_legumes_entrada.place(relx=0.6, rely=0.65, relwidth=0.25)
# Botões
but1 = Button(text="Calcular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=calcular_nutri_score)
but1.place(relx=0.1, rely=0.75, relwidth=0.25, relheight=0.08)
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.75, relwidth=0.25, relheight=0.08)
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.75, relwidth=0.25, relheight=0.08)
# Frame para o resultado com scrollbar
frame_resultado = Frame(root)
frame_resultado.place(relx=0.05, rely=0.85, relwidth=0.9, relheight=0.1)
# Widget Text para exibir o resultado
resultado_texto = Text(frame_resultado, font=("Arial", 12, "bold"), bg="#cfe2f3", wrap="word", height=5)
resultado_texto.pack(side=LEFT, fill=BOTH, expand=True)
# Scrollbar para o Text
scrollbar = Scrollbar(frame_resultado, command=resultado_texto.yview)
scrollbar.pack(side=RIGHT, fill=Y)
# Configura o Text para trabalhar com a Scrollbar
resultado_texto.config(yscrollcommand=scrollbar.set)
resultado_texto.config(state=DISABLED) # Desativa a edição por padrão
root.mainloop()