import tkinter as tk
from tkinter import ttk, messagebox
import matplotlib.pyplot as plt
# ----------------------解决中文乱码关键代码----------------------
plt.rcParams["font.family"] = ["SimHei", "Microsoft YaHei"]
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示异常
import warnings
warnings.filterwarnings("ignore") # 屏蔽字体警告
# ----------------------------------------------------------------
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# 主窗口
root = tk.Tk()
root.title("成绩走势图工具")
root.geometry("750x550")

# 存储数据
score_list = []
index_list = []

# 创建画布容器
fig = plt.Figure(figsize=(7, 4), dpi=100)
ax = fig.add_subplot(111)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas_widget = canvas.get_tk_widget()

# 控件区域
frame_ctrl = ttk.Frame(root, padding=8)
frame_ctrl.pack(side="top", fill="x")

ttk.Label(frame_ctrl, text="输入本次成绩：").grid(row=0, column=0, padx=5)
entry_score = ttk.Entry(frame_ctrl, width=15)
entry_score.grid(row=0, column=1, padx=5)


def refresh_chart():
    """刷新曲线图"""
    ax.clear()
    if len(score_list) > 0:
        ax.plot(index_list, score_list, marker='o', color='#2E86AB', linewidth=2, markersize=6)
        ax.set_xticks(index_list)
        ax.set_ylim(0, 105)
    ax.set_title("历次考试成绩走势", fontsize=12)
    ax.set_xlabel("考试次数")
    ax.set_ylabel("分数")
    ax.grid(True, alpha=0.3)
    canvas.draw()


def add_score():
    text = entry_score.get().strip()
    try:
        s = float(text)
        if not (0 <= s <= 100):
            messagebox.showerror("错误", "分数需要在0~100之间！")
            return
        score_list.append(s)
        index_list.append(len(score_list))
        entry_score.delete(0, tk.END)
        refresh_chart()
    except ValueError:
        messagebox.showerror("输入错误", "请输入合法数字成绩")


def clear_data():
    global score_list, index_list
    score_list = []
    index_list = []
    refresh_chart()


btn_add = ttk.Button(frame_ctrl, text="添加成绩", command=add_score)
btn_add.grid(row=0, column=2, padx=6)

btn_clear = ttk.Button(frame_ctrl, text="清空全部数据", command=clear_data)
btn_clear.grid(row=0, column=3, padx=6)

# 放置绘图面板
canvas_widget.pack(pady=10, fill="both", expand=True)

# 初始化空画布
refresh_chart()

root.mainloop()
