import tkinter as tk
from tkinter import ttk, messagebox, filedialog
from PIL import Image, ImageDraw, ImageFont
import os

class StudentIDMaker:
    def __init__(self, root):
        self.root = root
        self.root.title("学生证件生成器")
        self.root.geometry("520x420")
        self.root.resizable(False, False)

        # 变量定义
        self.name_var = tk.StringVar()
        self.id_var = tk.StringVar()
        self.class_var = tk.StringVar()
        self.major_var = tk.StringVar()
        self.school_var = tk.StringVar(value="某某大学")

        self.create_widgets()

    def create_widgets(self):
        # 主框架
        main_frame = ttk.Frame(self.root, padding=20)
        main_frame.pack(fill=tk.BOTH, expand=True)

        # 输入项
        ttk.Label(main_frame, text="学校名称：").grid(row=0, column=0, sticky="w", pady=6)
        ttk.Entry(main_frame, textvariable=self.school_var, width=35).grid(row=0, column=1, padx=10)

        ttk.Label(main_frame, text="学生姓名：").grid(row=1, column=0, sticky="w", pady=6)
        ttk.Entry(main_frame, textvariable=self.name_var, width=35).grid(row=1, column=1, padx=10)

        ttk.Label(main_frame, text="学号：").grid(row=2, column=0, sticky="w", pady=6)
        ttk.Entry(main_frame, textvariable=self.id_var, width=35).grid(row=2, column=1, padx=10)

        ttk.Label(main_frame, text="专业：").grid(row=3, column=0, sticky="w", pady=6)
        ttk.Entry(main_frame, textvariable=self.major_var, width=35).grid(row=3, column=1, padx=10)

        ttk.Label(main_frame, text="班级：").grid(row=4, column=0, sticky="w", pady=6)
        ttk.Entry(main_frame, textvariable=self.class_var, width=35).grid(row=4, column=1, padx=10)

        # 按钮区域
        btn_frame = ttk.Frame(main_frame)
        btn_frame.grid(row=6, column=0, columnspan=2, pady=25)

        ttk.Button(btn_frame, text="生成学生证", command=self.generate_card).pack(side=tk.LEFT, padx=10)
        ttk.Button(btn_frame, text="清空内容", command=self.clear_all).pack(side=tk.LEFT, padx=10)

        # 提示文字
        tip = ttk.Label(main_frame, text="生成后图片保存在程序同目录：student_card.png", foreground="#555555")
        tip.grid(row=7, column=0, columnspan=2)

    def clear_all(self):
        """清空输入框"""
        self.name_var.set("")
        self.id_var.set("")
        self.class_var.set("")
        self.major_var.set("")

    def generate_card(self):
        """生成学生证图片"""
        name = self.name_var.get().strip()
        stu_id = self.id_var.get().strip()
        clazz = self.class_var.get().strip()
        major = self.major_var.get().strip()
        school = self.school_var.get().strip()

        if not all([name, stu_id, clazz, major, school]):
            messagebox.showwarning("提示", "请填写完整所有信息！")
            return

        # 创建证件画布 (宽500 高320)
        width, height = 500, 320
        img = Image.new("RGB", (width, height), color="#f0f6fc")
        draw = ImageDraw.Draw(img)

        # 尝试加载字体，兼容Windows/Mac/Linux
        try:
            font_title = ImageFont.truetype("simhei.ttf", 26)
            font_text = ImageFont.truetype("simhei.ttf", 18)
        except:
            # 找不到黑体就使用默认字体
            font_title = ImageFont.load_default(size=26)
            font_text = ImageFont.load_default(size=18)

        # 绘制标题
        draw.text((width//2, 30), school + " 学生证", font=font_title, fill="#1a365d", anchor="mm")

        # 文字内容
        y_start = 90
        line_gap = 40
        content = [
            f"姓    名：{name}",
            f"学    号：{stu_id}",
            f"专    业：{major}",
            f"班    级：{clazz}"
        ]

        for text in content:
            draw.text((60, y_start), text, font=font_text, fill="#222222")
            y_start += line_gap

        # 底部备注
        draw.text((width//2, height - 45), "有效期：在校期间有效", font=font_text, fill="#444444", anchor="mm")

        # 保存图片
        save_path = "student_card.png"
        img.save(save_path)
        messagebox.showinfo("完成", f"学生证生成成功！\n文件：{os.path.abspath(save_path)}")
        # 自动打开图片
        img.show()


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