Загрузка данных
import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3
from datetime import datetime
db = sqlite3.connect("glucose.db")
db.execute("PRAGMA foreign_keys = ON")
db.executescript("""
CREATE TABLE IF NOT EXISTS user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
birthday TEXT,
gender TEXT
);
CREATE TABLE IF NOT EXISTS health (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
weight REAL,
height REAL,
minGlucose REAL,
maxGlucose REAL,
FOREIGN KEY(user_id) REFERENCES user(id)
);
CREATE TABLE IF NOT EXISTS glucose (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
glucoseLvl REAL NOT NULL,
dateLvl TEXT NOT NULL,
contextGlucose TEXT,
note TEXT,
FOREIGN KEY(user_id) REFERENCES user(id)
);
""")
db.commit()
root = tk.Tk()
root.title("Измерение глюкозы")
root.geometry("700x500")
tk.Label(root, text="Учёт глюкозы",
font=("Arial", 18)).pack(pady=10)
form = tk.Frame(root)
form.pack(pady=5)
tk.Label(form, text="Имя пользователя").grid(row=0, column=0)
name_entry = tk.Entry(form)
name_entry.grid(row=0, column=1)
tk.Label(form, text="Дата рождения").grid(row=1, column=0)
birthday_entry = tk.Entry(form)
birthday_entry.grid(row=1, column=1)
tk.Label(form, text="Пол").grid(row=2, column=0)
gender_entry = ttk.Combobox(
form, values=["Мужской", "Женский", "Другой"]
)
gender_entry.grid(row=2, column=1)
tk.Label(form, text="Глюкоза (ммоль/л)").grid(row=3, column=0)
glucose_entry = tk.Entry(form)
glucose_entry.grid(row=3, column=1)
tk.Label(form, text="Контекст").grid(row=4, column=0)
context_entry = ttk.Combobox(
form,
values=["Натощак", "После еды", "До еды", "Другое"]
)
context_entry.grid(row=4, column=1)
tk.Label(form, text="Самочувствие").grid(row=5, column=0)
note_entry = tk.Entry(form)
note_entry.grid(row=5, column=1)
def add_measurement():
name = name_entry.get().strip()
birthday = birthday_entry.get().strip()
gender = gender_entry.get()
value = glucose_entry.get().strip().replace(",", ".")
if not name or not value:
messagebox.showerror("Ошибка", "Введите имя и глюкозу")
return
try:
value = float(value)
if value <= 0:
raise ValueError
except ValueError:
messagebox.showerror("Ошибка", "Неверное значение глюкозы")
return
cur = db.cursor()
cur.execute(
"SELECT id FROM user WHERE name=? AND birthday=?",
(name, birthday)
)
result = cur.fetchone()
if result:
user_id = result[0]
else:
cur.execute(
"INSERT INTO user (name, birthday, gender) VALUES (?, ?, ?)",
(name, birthday, gender)
)
user_id = cur.lastrowid
cur.execute("""
INSERT INTO glucose
(user_id, glucoseLvl, dateLvl, contextGlucose, note)
VALUES (?, ?, ?, ?, ?)
""", (
user_id,
value,
datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
context_entry.get(),
note_entry.get()
))
db.commit()
refresh_table()
glucose_entry.delete(0, tk.END)
note_entry.delete(0, tk.END)
messagebox.showinfo("Готово", "Измерение сохранено")
def refresh_table():
for item in table.get_children():
table.delete(item)
rows = db.execute("""
SELECT glucose.id, user.name, glucose.glucoseLvl,
glucose.dateLvl, glucose.contextGlucose, glucose.note
FROM glucose
JOIN user ON user.id = glucose.user_id
ORDER BY glucose.id DESC
""").fetchall()
for row in rows:
table.insert("", "end", values=row)
tk.Button(
root, text="Сохранить измерение",
command=add_measurement
).pack(pady=10)
table = ttk.Treeview(
root,
columns=("id", "name", "value", "date", "context", "note"),
show="headings"
)
for col, title in [
("id", "ID"),
("name", "Пользователь"),
("value", "Глюкоза"),
("date", "Дата"),
("context", "Контекст"),
("note", "Самочувствие")
]:
table.heading(col, text=title)
table.column(col, width=105)
table.pack(fill="both", expand=True, padx=10, pady=10)
refresh_table()
root.mainloop()
db.close()