# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import ttk
import random
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# 解决matplotlib中文乱码
plt.rcParams["font.family"] = ["SimHei", "Microsoft YaHei"]
plt.rcParams["axes.unicode_minus"] = False

class RandomScoreGUI:
    def __init__(self, root):
        self.root = root
        self.root.title("随机成绩走势图｜Python界面版")
        self.root.geometry("950x620")

        # 数据存储
        self.exam_num = []   # 考试序号
        self.score = []      # 随机成绩

        # 顶部按钮区域
        frame_top = ttk.Frame(root)
        frame_top.pack(pady=15)

        ttk.Label(frame_top, text="生成考试次数：", font=("微软雅黑", 11)).grid(row=0, column=0, padx=5)
        self.count_var = tk.StringVar(value="8")
        ttk.Entry(frame_top, textvariable=self.count_var, width=6, font=("微软雅黑", 11)).grid(row=0, column=1)

        # 功能按钮
        ttk.Button(frame_top, text="🎲 随机生成成绩", command=self.random_create).grid(row=0, column=2, padx=10)
        ttk.Button(frame_top, text="🔄 清空图表", command=self.clear_chart).grid(row=0, column=3)

        # 创建绘图容器
        self.fig, self.ax = plt.subplots(figsize=(8.5, 5), dpi=100)
        self.canvas = FigureCanvasTkAgg(self.fig, master=root)
        self.canvas_widget = self.canvas.get_tk_widget()
        self.canvas_widget.pack(expand=True, fill=tk.BOTH, padx=15, pady=10)

        # 初始空白图
        self.init_empty()

    def init_empty(self):
        """初始空白提示"""
        self.ax.clear()
        self.ax.text(0.5, 0.5, "点击【随机生成成绩】自动生成走势图", 
                     ha="center", va="center", fontsize=14, color="#666")
        self.ax.set_xlim(0, 10)
        self.ax.set_ylim(0, 100)
        self.canvas.draw()

    def random_create(self):
        """随机生成成绩 + 绘制折线图"""
        try:
            cnt = int(self.count_var.get())
            if cnt < 3 or cnt > 20:
                cnt = 8
        except:
            cnt = 8

        # 清空旧数据
        self.exam_num.clear()
        self.score.clear()

        # 随机生成数据 分数50~100
        for i in range(1, cnt + 1):
            self.exam_num.append(i)
            self.score.append(random.randint(50, 100))

        # 绘图
        self.ax.clear()
        self.ax.plot(self.exam_num, self.score, 
                     color="#E74C3C", marker="o", linewidth=2.5, markersize=7)
        
        # 标注每个分数
        for x, y in zip(self.exam_num, self.score):
            self.ax.text(x, y+1, str(y), ha="center", fontsize=9)

        self.ax.set_title("学生历次考试随机成绩走势图", fontsize=16, pad=15)
        self.ax.set_xlabel("考试次数", fontsize=12)
        self.ax.set_ylabel("考试成绩", fontsize=12)
        self.ax.set_ylim(40, 105)
        self.ax.grid(True, alpha=0.3)
        self.canvas.draw()

    def clear_chart(self):
        """清空图表"""
        self.exam_num.clear()
        self.score.clear()
        self.init_empty()

if __name__ == "__main__":
    window = tk.Tk()
    app = RandomScoreGUI(window)
    window.mainloop()