from tkinter import *
from tkinter import ttk
class AppConverter:
def __init__(self):
self.root = Tk()
self.janela()
self.frames_da_janela()
self.widgets_frame1()
self.Menus()
self.root.mainloop()
def janela(self):
self.root.title("Vários indicadores de saúde")
self.root.configure(background='#1e3743')
self.root.geometry("900x400")
self.root.resizable(0, 0)
def frames_da_janela(self):
self.frame_1 = Frame(self.root, bd=4,
bg='#dfe3ee',
highlightbackground='#759fe6',
highlightthickness=2)
self.frame_1.place(relx=0.02, rely=0.02,
relwidth=0.96, relheight=0.96)
def widgets_frame1(self):
self.abas = ttk.Notebook(self.frame_1)
self.Verificar_Glicemia = Frame(self.abas, bg="#dfe3ee")
self.Verificar_Colesterol = Frame(self.abas, bg="#dfe3ee")
self.Calcular_IMC = Frame(self.abas, bg="#dfe3ee")
self.Classificar_Pressao_Arterial = Frame(self.abas, bg="#dfe3ee")
self.Classificar_Frequencia_Cardiaca = Frame(self.abas, bg="#dfe3ee")
self.Indice_Cintura_Altura = Frame(self.abas, bg="#dfe3ee")
self.abas.add(self.Verificar_Glicemia, text="Classificar Glicemia")
self.abas.add(self.Verificar_Colesterol, text="Classificar Colesterol")
self.abas.add(self.Calcular_IMC, text="Classificar IMC")
self.abas.add(self.Classificar_Pressao_Arterial, text="Classificar Pressão Arterial")
self.abas.add(self.Classificar_Frequencia_Cardiaca, text="Classificar Frequência Cardíaca")
self.abas.add(self.Indice_Cintura_Altura, text="Índice Cintura-Altura")
self.abas.place(relx=0, rely=0, relwidth=0.98, relheight=0.98)
# ---------------- GLICEMIA ----------------
self.nivel_Glicemia = StringVar()
Label(self.Verificar_Glicemia,
text="Glicemia (mg/dL):",
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.1)
Entry(self.Verificar_Glicemia,
textvariable=self.nivel_Glicemia,
justify='center',
font=("Arial", 15, "bold")).place(relx=0.4, rely=0.1, relwidth=0.45)
Button(self.Verificar_Glicemia,
text="Verificar",
bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'),
command=self.butaoclick1).place(relx=0.4, rely=0.35, relwidth=0.25, relheight=0.1)
self.resultado_classificar_Glicemia = StringVar()
Label(self.Verificar_Glicemia,
textvariable=self.resultado_classificar_Glicemia,
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.6, relwidth=0.9)
# ---------------- COLESTEROL ----------------
self.nivel_Colesterol = StringVar()
Label(self.Verificar_Colesterol,
text="Colesterol (mg/dL):",
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.1)
Entry(self.Verificar_Colesterol,
textvariable=self.nivel_Colesterol,
justify='center',
font=("Arial", 15, "bold")).place(relx=0.4, rely=0.1, relwidth=0.45)
Button(self.Verificar_Colesterol,
text="Verificar",
bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'),
command=self.butaoclick2).place(relx=0.4, rely=0.35, relwidth=0.25, relheight=0.1)
self.resultado_classificar_Colesterol = StringVar()
Label(self.Verificar_Colesterol,
textvariable=self.resultado_classificar_Colesterol,
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.6, relwidth=0.9)
# ---------------- PRESSÃO ARTERIAL ----------------
self.pas = StringVar()
self.pad = StringVar()
Label(self.Classificar_Pressao_Arterial,
text="Pressão Sistólica (PAS):",
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.1)
Entry(self.Classificar_Pressao_Arterial,
textvariable=self.pas,
justify='center',
font=("Arial", 15, "bold")).place(relx=0.45, rely=0.1, relwidth=0.4)
Label(self.Classificar_Pressao_Arterial,
text="Pressão Diastólica (PAD):",
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.3)
Entry(self.Classificar_Pressao_Arterial,
textvariable=self.pad,
justify='center',
font=("Arial", 15, "bold")).place(relx=0.45, rely=0.3, relwidth=0.4)
Button(self.Classificar_Pressao_Arterial,
text="Classificar",
bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'),
command=self.butaoclick_pa).place(relx=0.35, rely=0.45, relwidth=0.3, relheight=0.1)
self.resultado_pa = StringVar()
Label(self.Classificar_Pressao_Arterial,
textvariable=self.resultado_pa,
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.6, relwidth=0.9)
# ---------------- IMC ----------------
self.Peso_kg = StringVar()
self.Altura_m = StringVar()
Label(self.Calcular_IMC,
text="Peso (kg):",
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.1)
Entry(self.Calcular_IMC,
textvariable=self.Peso_kg,
justify='center',
font=("Arial", 15, "bold")).place(relx=0.4, rely=0.1, relwidth=0.45)
Label(self.Calcular_IMC,
text="Altura (m):",
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.3)
Entry(self.Calcular_IMC,
textvariable=self.Altura_m,
justify='center',
font=("Arial", 15, "bold")).place(relx=0.4, rely=0.3, relwidth=0.45)
Button(self.Calcular_IMC,
text="Calcular",
bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'),
command=self.butaoclick3).place(relx=0.35, rely=0.45, relwidth=0.3, relheight=0.1)
self.resultado_IMC = StringVar()
Label(self.Calcular_IMC,
textvariable=self.resultado_IMC,
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.6, relwidth=0.9)
# ---------------- ICA (CINTURA-ALTURA) ----------------
self.Cintura_cm = StringVar()
self.Altura_cm = StringVar()
Label(self.Indice_Cintura_Altura,
text="Cintura (cm):",
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.1)
Entry(self.Indice_Cintura_Altura,
textvariable=self.Cintura_cm,
justify='center',
font=("Arial", 15, "bold")).place(relx=0.4, rely=0.1, relwidth=0.45)
Label(self.Indice_Cintura_Altura,
text="Altura (cm):",
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.3)
Entry(self.Indice_Cintura_Altura,
textvariable=self.Altura_cm,
justify='center',
font=("Arial", 15, "bold")).place(relx=0.4, rely=0.3, relwidth=0.45)
Button(self.Indice_Cintura_Altura,
text="Calcular ICA",
bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'),
command=self.butaoclick_ica).place(relx=0.35, rely=0.45, relwidth=0.3, relheight=0.1)
self.resultado_ica = StringVar()
Label(self.Indice_Cintura_Altura,
textvariable=self.resultado_ica,
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.6, relwidth=0.9)
# ---------------- FREQUÊNCIA CARDÍACA ----------------
self.fc = StringVar()
Label(self.Classificar_Frequencia_Cardiaca,
text="Frequência Cardíaca (bpm):",
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.1)
Entry(self.Classificar_Frequencia_Cardiaca,
textvariable=self.fc,
justify='center',
font=("Arial", 15, "bold")).place(relx=0.45, rely=0.1, relwidth=0.4)
Button(self.Classificar_Frequencia_Cardiaca,
text="Classificar",
bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'),
command=self.butaoclick_fc).place(relx=0.35, rely=0.35, relwidth=0.3, relheight=0.1)
self.resultado_fc = StringVar()
Label(self.Classificar_Frequencia_Cardiaca,
textvariable=self.resultado_fc,
bg='#dfe3ee', fg='#107db2',
font=("Arial", 15, "bold")).place(relx=0.05, rely=0.6, relwidth=0.9)
# ---------------- FUNÇÕES ----------------
def butaoclick1(self):
try:
valor = float(self.nivel_Glicemia.get())
if valor < 70:
res = "Baixa"
elif valor <= 99:
res = "Normal"
elif valor <= 125:
res = "Pré-diabetes"
else:
res = "Diabetes"
self.resultado_classificar_Glicemia.set(f"Resultado: {res}")
except ValueError:
self.resultado_classificar_Glicemia.set("Valor inválido")
def butaoclick2(self):
try:
valor = float(self.nivel_Colesterol.get())
if valor < 200:
res = "Desejável"
elif valor <= 239:
res = "Limítrofe"
else:
res = "Elevado"
self.resultado_classificar_Colesterol.set(f"Classificação: {res}")
except ValueError:
self.resultado_classificar_Colesterol.set("Valor inválido")
def butaoclick3(self):
try:
peso = float(self.Peso_kg.get())
altura = float(self.Altura_m.get())
if altura <= 0:
self.resultado_IMC.set("Altura inválida")
return
imc = peso / (altura ** 2)
if imc < 18.5:
classe = "Baixo peso"
elif imc < 25:
classe = "Normal"
elif imc < 30:
classe = "Excesso de peso"
elif imc < 35:
classe = "Obesidade I"
elif imc < 40:
classe = "Obesidade II"
else:
classe = "Obesidade III"
self.resultado_IMC.set(f"IMC: {imc:.2f} → {classe}")
except ValueError:
self.resultado_IMC.set("Valor inválido")
def butaoclick_pa(self):
try:
pas = float(self.pas.get())
pad = float(self.pad.get())
if pas < 90 or pad < 60:
classe = "Hipotensão"
elif pas < 120 and pad < 80:
classe = "Normal"
elif 120 <= pas < 130 and pad < 80:
classe = "Elevada"
elif pas >= 130 or pad >= 80:
classe = "Hipertensão"
else:
classe = "Indefinida"
self.resultado_pa.set(f"Pressão: {pas}/{pad} mmHg → {classe}")
except ValueError:
self.resultado_pa.set("Valor inválido")
def butaoclick_ica(self):
try:
cintura = float(self.Cintura_cm.get())
altura = float(self.Altura_cm.get())
if altura <= 0:
self.resultado_ica.set("Altura inválida")
return
ica = cintura / altura
if ica < 0.4:
classe = "Baixo"
elif ica < 0.5:
classe = "Saudável"
elif ica < 0.6:
classe = "Risco aumentado"
else:
classe = "Risco elevado"
self.resultado_ica.set(f"ICA: {ica:.2f} → {classe}")
except ValueError:
self.resultado_ica.set("Valor inválido")
def butaoclick_fc(self):
try:
bpm = float(self.fc.get())
if bpm < 60:
classe = "Bradicardia"
elif bpm <= 100:
classe = "Normal"
else:
classe = "Taquicardia"
self.resultado_fc.set(f"FC: {bpm:.0f} bpm → {classe}")
except ValueError:
self.resultado_fc.set("Valor inválido")
# ---------------- MENU ----------------
def Quit(self):
self.root.destroy()
def Menus(self):
menubar = Menu(self.root)
self.root.config(menu=menubar)
filemenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Opções", menu=filemenu)
filemenu.add_command(label="Sair", command=self.Quit)
AppConverter()