from tkinter import *
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox
import sqlite3
from datetime import date
# Configurar banco de dados
def Database():
global conn, cursor
conn = sqlite3.connect("Medica.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS REGISTRATION (
RID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
Data TEXT,
Sistolica TEXT,
Diastolica TEXT
)
""")
conn.commit()
# Função para exibir o formulário principal
def DisplayForm():
global tree, sistolica, diastolica, data
root = Tk()
root.geometry("900x500")
root.title("Registar a Tensão")
# Variáveis
sistolica = StringVar()
diastolica = StringVar()
data = StringVar(value=date.today().strftime("%Y-%m-%d"))
# Layout
TopViewForm = Frame(root, width=300, bd=1, relief=SOLID)
TopViewForm.pack(side=TOP, fill=X)
LFrom = Frame(root, width="350", bg="#15244C")
LFrom.pack(side=LEFT, fill=Y)
LeftViewForm = Frame(root, width=300, bg="#0B4670")
LeftViewForm.pack(side=LEFT, fill=Y)
MidViewForm = Frame(root, width=600)
MidViewForm.pack(side=RIGHT)
# Título
lbl_text = Label(TopViewForm,
text="Registar a Tensão",
font=('verdana', 18), width=600, bg="cyan")
lbl_text.pack(fill=X)
# Campo de Data
Label(LFrom, text="Data ", font=("Arial", 12),
bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"),
textvariable=data).pack(side=TOP, padx=10, fill=X)
# Campo de Sistolica
Label(LFrom, text="Sistolica ", font=("Arial", 12),
bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"),
textvariable=sistolica).pack(side=TOP, padx=10, fill=X)
# Campo de Diastolica
Label(LFrom, text="Diastolica ", font=("Arial", 12),
bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"),
textvariable=diastolica).pack(side=TOP, padx=10, fill=X)
# Botão Submeter
Button(LFrom, text="Submeter", font=("Arial", 10, "bold"),
bg="cyan", command=register).pack(side=TOP, padx=10, pady=5, fill=X)
# Botão Atualizar
Button(LFrom, text="Atualizar", font=("Arial", 10, "bold"),
bg="cyan", command=update).pack(side=TOP, padx=10, pady=5, fill=X)
# Botão Limpar
Button(LFrom, text="Limpar", font=("Arial", 10, "bold"),
bg="cyan", command=limpar).pack(side=TOP, padx=10, pady=5, fill=X)
# Botão Apagar
Button(LeftViewForm, text="Apagar", bg="cyan", command=delete
).pack(side=TOP, padx=10, pady=10, fill=X)
# Botão Ver Tudo
Button(LeftViewForm, text="Ver tudo", bg="cyan", command=DisplayData
).pack(side=TOP, padx=10, pady=10, fill=X)
# Botão Sair
Button(LeftViewForm, text="Sair", bg="cyan", command=root.destroy
).pack(side=TOP, padx=10, pady=10, fill=X)
# Tabela de Registros
scrollbarx = Scrollbar(MidViewForm, orient=HORIZONTAL)
scrollbary = Scrollbar(MidViewForm, orient=VERTICAL)
tree = ttk.Treeview(MidViewForm, columns=("RID", "Data", "Sistolica", "Diastolica"),
selectmode="extended", height=100,
yscrollcommand=scrollbary.set, xscrollcommand=scrollbarx.set)
scrollbary.config(command=tree.yview)
scrollbary.pack(side=RIGHT, fill=Y)
scrollbarx.config(command=tree.xview)
scrollbarx.pack(side=BOTTOM, fill=X)
tree.heading('RID', text="ID", anchor=W)
tree.heading('Data', text="Data", anchor=W)
tree.heading('Sistolica', text="Sistolica", anchor=W)
tree.heading('Diastolica', text="Diastolica", anchor=W)
tree.column('#0', stretch=NO, minwidth=0, width=0)
tree.column('#1', stretch=NO, minwidth=0, width=50)
tree.column('#2', stretch=NO, minwidth=0, width=100)
tree.column('#3', stretch=NO, minwidth=0, width=100)
tree.pack()
tree.bind("<Double-1>", OnDoubleClick)
DisplayData()
root.mainloop()
# Função para registrar os dados no banco de dados
def register():
Database()
vdata = data.get()
vsistolica = sistolica.get()
vdiastolica = diastolica.get()
if vdata == '' or vsistolica == "" or vdiastolica == "":
tkMessageBox.showinfo("Atenção", "Preencha todos os campos!")
else:
cursor.execute('INSERT INTO REGISTRATION (Data, Sistolica, Diastolica) VALUES (?, ?, ?)',
(vdata, vsistolica, vdiastolica))
conn.commit()
tkMessageBox.showinfo("Sucesso", "Registro adicionado com sucesso!")
DisplayData()
conn.close()
# Função para exibir os dados no Treeview
def DisplayData():
Database()
tree.delete(*tree.get_children())
cursor = conn.execute("SELECT * FROM REGISTRATION")
for row in cursor.fetchall():
tree.insert('', 'end', values=row)
conn.close()
# Função para limpar os campos de entrada
def limpar():
data.set(date.today().strftime("%Y-%m-%d"))
sistolica.set("")
diastolica.set("")
# Função para selecionar um item da tabela (clique duplo)
def OnDoubleClick(event):
curItem = tree.focus()
contents = tree.item(curItem)
selecteditem = contents['values']
if selecteditem:
data.set(selecteditem[1])
sistolica.set(selecteditem[2])
diastolica.set(selecteditem[3])
# Função para atualizar o registro selecionado
def update():
Database()
curItem = tree.focus()
contents = tree.item(curItem)
selecteditem = contents['values']
if selecteditem:
rid = selecteditem[0]
vdata = data.get()
vsistolica = sistolica.get()
vdiastolica = diastolica.get()
if vdata == '' or vsistolica == "" or vdiastolica == "":
tkMessageBox.showinfo("Atenção", "Preencha todos os campos!")
else:
cursor.execute("""
UPDATE REGISTRATION SET Data = ?, Sistolica = ?, Diastolica = ? WHERE RID = ?
""", (vdata, vsistolica, vdiastolica, rid))
conn.commit()
tkMessageBox.showinfo("Sucesso", "Registro atualizado com sucesso!")
DisplayData()
conn.close()
# Função para apagar o registro selecionado
def delete():
Database()
curItem = tree.focus()
contents = tree.item(curItem)
selecteditem = contents['values']
if selecteditem:
rid = selecteditem[0]
result = tkMessageBox.askquestion("Confirmar", "Deseja apagar o registro selecionado?", icon="warning")
if result == 'yes':
cursor.execute("DELETE FROM REGISTRATION WHERE RID = ?", (rid,))
conn.commit()
tkMessageBox.showinfo("Sucesso", "Registro apagado com sucesso!")
DisplayData()
conn.close()
# Executar o programa principal
if __name__ == '__main__':
DisplayForm()