diff --git a/main.py b/main.py new file mode 100644 index 0000000..de9a12b --- /dev/null +++ b/main.py @@ -0,0 +1,225 @@ +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() \ No newline at end of file