|
|
|
|
import tkinter as tk
|
|
|
|
|
import pymysql
|
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
con = pymysql.connect(
|
|
|
|
|
host='localhost',
|
|
|
|
|
user='root',
|
|
|
|
|
password='root',
|
|
|
|
|
database='health',
|
|
|
|
|
charset='utf8mb4',
|
|
|
|
|
autocommit=True
|
|
|
|
|
)
|
|
|
|
|
cursor = con.cursor() # 创建游标对象
|
|
|
|
|
def button1():
|
|
|
|
|
|
|
|
|
|
cursor.execute("select * from health")
|
|
|
|
|
result = cursor.fetchall()
|
|
|
|
|
|
|
|
|
|
# 创建一个新的窗口
|
|
|
|
|
result_window = tk.Toplevel(root)
|
|
|
|
|
result_window.title("查询结果")
|
|
|
|
|
|
|
|
|
|
# 创建一个文本框用于显示查询结果
|
|
|
|
|
result_text = tk.Text(result_window)
|
|
|
|
|
result_text.pack(pady=10)
|
|
|
|
|
|
|
|
|
|
# 将查询结果存储到一个变量中
|
|
|
|
|
result_str = ""
|
|
|
|
|
for row in result:
|
|
|
|
|
result_str += str(row) + "\n"
|
|
|
|
|
|
|
|
|
|
# 将查询结果显示在文本框中
|
|
|
|
|
result_text.insert(tk.END, result_str)
|
|
|
|
|
result_text.config(state=tk.DISABLED)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def button2():
|
|
|
|
|
root = tk.Tk()
|
|
|
|
|
root.title("new")
|
|
|
|
|
root.geometry("500x500")
|
|
|
|
|
|
|
|
|
|
screen_width = root.winfo_screenwidth()
|
|
|
|
|
screen_height = root.winfo_screenheight()
|
|
|
|
|
|
|
|
|
|
l1 = tk.Label(root, text="姓名:", width=30, height=2)
|
|
|
|
|
l1.pack()
|
|
|
|
|
entry1 = tk.Entry(root)
|
|
|
|
|
entry1.pack()
|
|
|
|
|
l2 = tk.Label(root, text="性别:", width=30, height=2)
|
|
|
|
|
l2.pack()
|
|
|
|
|
entry2 = tk.Entry(root)
|
|
|
|
|
entry2.pack()
|
|
|
|
|
l3 = tk.Label(root, text="年龄:", width=30, height=2)
|
|
|
|
|
l3.pack()
|
|
|
|
|
entry3 = tk.Entry(root)
|
|
|
|
|
entry3.pack()
|
|
|
|
|
l4 = tk.Label(root, text="身高:", width=30, height=2)
|
|
|
|
|
l4.pack()
|
|
|
|
|
entry4 = tk.Entry(root)
|
|
|
|
|
entry4.pack()
|
|
|
|
|
l5 = tk.Label(root, text="体重:", width=30, height=2)
|
|
|
|
|
l5.pack()
|
|
|
|
|
entry5 = tk.Entry(root)
|
|
|
|
|
entry5.pack()
|
|
|
|
|
|
|
|
|
|
# 定义按钮的响应函数
|
|
|
|
|
def button():
|
|
|
|
|
# con = pymysql.connect(
|
|
|
|
|
# host='localhost',
|
|
|
|
|
# user='root',
|
|
|
|
|
# password='root',
|
|
|
|
|
# database='health',
|
|
|
|
|
# charset='utf8mb4',
|
|
|
|
|
# autocommit=True
|
|
|
|
|
# )
|
|
|
|
|
# cursor = con.cursor() # 创建游标对象
|
|
|
|
|
cursor.execute("select * from health")
|
|
|
|
|
result = cursor.fetchall()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
l1.config(text="新建成功!")
|
|
|
|
|
name = entry1.get()
|
|
|
|
|
sex = entry2.get()
|
|
|
|
|
age = entry3.get()
|
|
|
|
|
height = entry4.get()
|
|
|
|
|
weight = entry5.get()
|
|
|
|
|
|
|
|
|
|
if not name or not age or not sex or not height or not weight:
|
|
|
|
|
l1.config(text='添加失败,请填写完整信息')
|
|
|
|
|
l1.after(2000, lambda: l1.config(text="姓名:")) # 2秒消失
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
cursor.execute("INSERT INTO health (name,age,sex,height,weight) VALUES (%s, %s, %s, %s, %s)", (name,age,sex,height,weight))
|
|
|
|
|
con.commit()
|
|
|
|
|
l1.config(text='添加成功!')
|
|
|
|
|
except Exception as e:
|
|
|
|
|
l1.config(text='添加失败!')
|
|
|
|
|
# 创建按钮
|
|
|
|
|
button = tk.Button(root, text="确认新建", command=button)
|
|
|
|
|
button.pack()
|
|
|
|
|
|
|
|
|
|
def button3():
|
|
|
|
|
root = tk.Tk()
|
|
|
|
|
root.title("new")
|
|
|
|
|
root.geometry("500x500")
|
|
|
|
|
|
|
|
|
|
screen_width = root.winfo_screenwidth()
|
|
|
|
|
screen_height = root.winfo_screenheight()
|
|
|
|
|
|
|
|
|
|
l1 = tk.Label(root, text="姓名:", width=30, height=2)
|
|
|
|
|
l1.pack()
|
|
|
|
|
entry1 = tk.Entry(root)
|
|
|
|
|
entry1.pack()
|
|
|
|
|
l2 = tk.Label(root, text="月份:", width=30, height=2)
|
|
|
|
|
l2.pack()
|
|
|
|
|
entry2 = tk.Entry(root)
|
|
|
|
|
entry2.pack()
|
|
|
|
|
l3 = tk.Label(root, text="身高:", width=30, height=2)
|
|
|
|
|
l3.pack()
|
|
|
|
|
entry3 = tk.Entry(root)
|
|
|
|
|
entry3.pack()
|
|
|
|
|
l4 = tk.Label(root, text="体重:", width=30, height=2)
|
|
|
|
|
l4.pack()
|
|
|
|
|
entry4 = tk.Entry(root)
|
|
|
|
|
entry4.pack()
|
|
|
|
|
|
|
|
|
|
# 定义按钮的响应函数
|
|
|
|
|
def button():
|
|
|
|
|
try:
|
|
|
|
|
# 从输入框获取数据
|
|
|
|
|
name = entry1.get()
|
|
|
|
|
month = entry2.get()
|
|
|
|
|
height = entry3.get()
|
|
|
|
|
weight = entry4.get()
|
|
|
|
|
|
|
|
|
|
# 检查是否所有输入框都已填写
|
|
|
|
|
if not all([name, month, height, weight]):
|
|
|
|
|
l1.config(text='添加失败,请填写完整信息')
|
|
|
|
|
# 2秒后重置文本
|
|
|
|
|
l1.after(2000, lambda: l1.config(text="姓名:"))
|
|
|
|
|
return
|
|
|
|
|
# 执行插入操作
|
|
|
|
|
cursor.execute("INSERT INTO month (name, month, height, weight) VALUES (%s, %s, %s, %s)",
|
|
|
|
|
(name, month, height, weight))
|
|
|
|
|
con.commit() # 提交事务
|
|
|
|
|
l1.config(text='添加成功!')
|
|
|
|
|
except Exception as e:
|
|
|
|
|
l1.config(text=f'添加失败:{e}')
|
|
|
|
|
button = tk.Button(root, text="确认新建", command=button)
|
|
|
|
|
button.pack()
|
|
|
|
|
def button4():
|
|
|
|
|
def show_query_result():
|
|
|
|
|
user_input = entry.get()
|
|
|
|
|
if user_input: # 确保用户输入不为空
|
|
|
|
|
# 根据用户输入查询 name
|
|
|
|
|
cursor.execute("SELECT name, height, weight FROM month WHERE name LIKE %s", ('%' + user_input + '%',))
|
|
|
|
|
result = cursor.fetchall() # 获取查询结果
|
|
|
|
|
|
|
|
|
|
# 清空结果标签的旧内容
|
|
|
|
|
result_label.config(text="")
|
|
|
|
|
|
|
|
|
|
if result:
|
|
|
|
|
# 此处 result 已包含 name, height, weight,可以直接使用
|
|
|
|
|
身高 = [row[1] for row in result] # 假设 height 是第二列
|
|
|
|
|
体重 = [row[2] for row in result] # 假设 weight 是第三列
|
|
|
|
|
plt.scatter(身高, 体重)
|
|
|
|
|
plt.title("身高 和 体重", fontproperties="SimHei")
|
|
|
|
|
plt.xlabel('身高', fontproperties="SimHei")
|
|
|
|
|
plt.ylabel('体重', fontproperties="SimHei")
|
|
|
|
|
plt.show()
|
|
|
|
|
else:
|
|
|
|
|
result_label.config(text="没有找到匹配的数据。")
|
|
|
|
|
else:
|
|
|
|
|
result_label.config(text="请输入查询的名字。")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
query_window = tk.Toplevel(root)
|
|
|
|
|
query_window.title("查询健康信息")
|
|
|
|
|
query_window.geometry("300x200")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
l0 = tk.Label(query_window, text="请输入需要查询的用户:", width=30, height=2)
|
|
|
|
|
l0.pack()
|
|
|
|
|
entry = tk.Entry(query_window)
|
|
|
|
|
entry.pack()
|
|
|
|
|
get_input_button = tk.Button(query_window, text="确认查询", command=show_query_result)
|
|
|
|
|
get_input_button.pack()
|
|
|
|
|
result_label = tk.Label(query_window, text="")
|
|
|
|
|
result_label.pack()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def button5():
|
|
|
|
|
root.destroy()
|
|
|
|
|
|
|
|
|
|
#这是主界面
|
|
|
|
|
root = tk.Tk()
|
|
|
|
|
root.title("Health")
|
|
|
|
|
root.geometry("500x500")
|
|
|
|
|
|
|
|
|
|
screen_width = root.winfo_screenwidth()
|
|
|
|
|
screen_height = root.winfo_screenheight()
|
|
|
|
|
|
|
|
|
|
x = (screen_width - 500) // 2
|
|
|
|
|
y = (screen_height - 500) // 2
|
|
|
|
|
|
|
|
|
|
root.geometry("+{}+{}".format(x, y))
|
|
|
|
|
|
|
|
|
|
button1 = tk.Button(root, text="用户列表", command=button1)
|
|
|
|
|
button1.pack(pady=10)
|
|
|
|
|
|
|
|
|
|
button2 = tk.Button(root, text="新建用户信息", command=button2)
|
|
|
|
|
button2.pack(pady=10)
|
|
|
|
|
|
|
|
|
|
button3 = tk.Button(root, text="新建用户健康指数", command=button3)
|
|
|
|
|
button3.pack(pady=10)
|
|
|
|
|
|
|
|
|
|
button4 = tk.Button(root, text="查询健康指数", command=button4)
|
|
|
|
|
button4.pack(pady=10)
|
|
|
|
|
|
|
|
|
|
button5 = tk.Button(root, text="退出程序", command=button5)
|
|
|
|
|
button5.pack(pady=10)
|
|
|
|
|
|
|
|
|
|
root.mainloop()
|