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

# 生成学生证的核心函数
def create_student_card():
    # 获取输入框内容
    name = entry_name.get().strip()
    gender = entry_gender.get().strip()
    cls = entry_class.get().strip()
    stu_id = entry_id.get().strip()
    birth = entry_birth.get().strip()
    school = "东台实验小学"
    
    # 校验必填项
    if not all([name, gender, cls, stu_id, birth]):
        messagebox.showerror("错误", "请填写完整信息！")
        return

    # 创建学生证画布（白色背景）
    card_width, card_height = 400, 250
    card = Image.new("RGB", (card_width, card_height), "white")
    draw = ImageDraw.Draw(card)

    # 加载字体（Windows自带，适配绝大多数电脑）
    try:
        font_title = ImageFont.truetype("simhei.ttf", 28)  # 标题
        font_text = ImageFont.truetype("simhei.ttf", 20)   # 内容
    except:
        font_title = ImageFont.load_default(size=28)
        font_text = ImageFont.load_default(size=20)

    # 绘制边框
    draw.rectangle([10, 10, card_width-10, card_height-10], outline="blue", width=4)

    # 绘制标题
    draw.text((card_width/2, 30), f"{school} 学生证", font=font_title, fill="darkblue", anchor="mm")

    # 绘制学生信息
    draw.text((50, 90), f"姓        名：{name}", font=font_text, fill="black")
    draw.text((50, 125), f"性        别：{gender}", font=font_text, fill="black")
    draw.text((50, 160), f"班        级：{cls}", font=font_text, fill="black")
    draw.text((50, 195), f"学        号：{stu_id}", font=font_text, fill="black")
    draw.text((210, 195), f"出生日期：{birth}", font=font_text, fill="black")

    # 保存图片
    save_path = f"东台实验小学_{stu_id}_{name}_学生证.png"
    card.save(save_path)
    messagebox.showinfo("成功", f"学生证已生成！\n保存路径：{os.path.abspath(save_path)}")

# 清空输入框
def clear_entries():
    entry_name.delete(0, tk.END)
    entry_gender.delete(0, tk.END)
    entry_class.delete(0, tk.END)
    entry_id.delete(0, tk.END)
    entry_birth.delete(0, tk.END)

# ====================== 主界面 ======================
root = tk.Tk()
root.title("东台实验小学 学生证生成器")
root.geometry("450x320")
root.resizable(False, False)

# 样式设置
style = ttk.Style()
style.configure("TLabel", font=("微软雅黑", 12))
style.configure("TButton", font=("微软雅黑", 11))

# 标题标签
tk.Label(root, text="东台实验小学学生证生成器", font=("微软雅黑", 16, "bold"), fg="red").pack(pady=10)

# 表单框架
frame = ttk.Frame(root)
frame.pack(pady=5, padx=20, fill="x")

# 姓名
ttk.Label(frame, text="姓        名：").grid(row=0, column=0, sticky="w", pady=5)
entry_name = ttk.Entry(frame, font=("微软雅黑", 11))
entry_name.grid(row=0, column=1, padx=10, pady=5, sticky="we")

# 性别
ttk.Label(frame, text="性        别：").grid(row=1, column=0, sticky="w", pady=5)
entry_gender = ttk.Entry(frame, font=("微软雅黑", 11))
entry_gender.grid(row=1, column=1, padx=10, pady=5, sticky="we")

# 班级
ttk.Label(frame, text="班        级：").grid(row=2, column=0, sticky="w", pady=5)
entry_class = ttk.Entry(frame, font=("微软雅黑", 11))
entry_class.grid(row=2, column=1, padx=10, pady=5, sticky="we")

# 学号
ttk.Label(frame, text="学        号：").grid(row=3, column=0, sticky="w", pady=5)
entry_id = ttk.Entry(frame, font=("微软雅黑", 11))
entry_id.grid(row=3, column=1, padx=10, pady=5, sticky="we")

# 出生日期
ttk.Label(frame, text="出生日期：").grid(row=4, column=0, sticky="w", pady=5)
entry_birth = ttk.Entry(frame, font=("微软雅黑", 11))
entry_birth.grid(row=4, column=1, padx=10, pady=5, sticky="we")

frame.columnconfigure(1, weight=1)

# 按钮框架
btn_frame = ttk.Frame(root)
btn_frame.pack(pady=15)

ttk.Button(btn_frame, text="生成学生证", command=create_student_card, style="TButton").grid(row=0, column=0, padx=15)
ttk.Button(btn_frame, text="清空内容", command=clear_entries, style="TButton").grid(row=0, column=1, padx=15)

# 运行主循环
root.mainloop()