import tkinter as tk
from tkinter import ttk, messagebox

class MechanicalStudentCard:
    def __init__(self, root):
        self.root = root
        self.root.title("机械工程学院学生证生成器")
        self.root.geometry("760x530")
        self.root.resizable(False, False)
        self.root.config(bg="#f2f6fb")

        # 布局容器
        self.top_title = tk.Label(root, text="机械工程学院 学生证", font=("黑体", 22, "bold"), fg="#b81020", bg="#f2f6fb")
        self.top_title.pack(pady=12)

        main_container = tk.Frame(root, bg="#f2f6fb")
        main_container.pack(fill=tk.BOTH, expand=True, padx=20)

        # 左侧信息录入面板
        input_panel = tk.LabelFrame(main_container, text="学生信息填写", font=("微软雅黑",12), bg="white")
        input_panel.pack(side=tk.LEFT, fill=tk.Y, padx=10, pady=5)

        field_texts = ["姓名", "学号", "入学年级", "性别", "出生日期"]
        self.input_boxes = []
        for index, text in enumerate(field_texts):
            tk.Label(input_panel, text=f"{text}：", font=("微软雅黑",10), bg="white").grid(row=index, column=0, padx=8, pady=9, sticky="w")
            entry = ttk.Entry(input_panel, width=20)
            entry.grid(row=index, column=1, padx=6, pady=9)
            self.input_boxes.append(entry)

        # 生成按钮
        create_btn = ttk.Button(input_panel, text="生成学生证预览", command=self.make_id_card)
        create_btn.grid(row=6, column=0, columnspan=2, pady=16)

        # 右侧学生证预览画布
        preview_panel = tk.LabelFrame(main_container, text="证件预览区", font=("微软雅黑",12), bg="white")
        preview_panel.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=10, pady=5)

        self.card_canvas = tk.Canvas(preview_panel, width=430, height=370, bg="#e8eff8")
        self.card_canvas.pack(pady=8)
        self.draw_empty_template()

    # 绘制空白学生证模板
    def draw_empty_template(self):
        # 外边框
        self.card_canvas.create_rectangle(8,8,422,362, fill="white", outline="#003370", width=3)
        self.card_canvas.create_rectangle(12,12,418,358, fill="#f7fafe", outline="#77aadd", width=1)
        # 顶部标题
        self.card_canvas.create_text(215,36, text="XX理工大学机械工程学院", font=("黑体",17,"bold"), fill="#003370")
        # 照片占位框
        self.card_canvas.create_rectangle(282,62,398,178, fill="#dde6f0", outline="#222222", width=2)
        self.card_canvas.create_text(340,120, text="一寸免冠照片", font=("微软雅黑",9), fill="#444444")

    # 生成填充完整学生证
    def make_id_card(self):
        name = self.input_boxes[0].get().strip()
        stu_id = self.input_boxes[1].get().strip()
        grade = self.input_boxes[2].get().strip()
        gender = self.input_boxes[3].get().strip()
        birthday = self.input_boxes[4].get().strip()

        # 空值校验
        if not (name and stu_id and grade and gender and birthday):
            messagebox.showwarning("填写提醒", "所有信息必须完整填写！")
            return

        # 清空画布重绘
        self.card_canvas.delete(tk.ALL)
        # 基础边框
        self.card_canvas.create_rectangle(8,8,422,362, fill="white", outline="#003370", width=3)
        self.card_canvas.create_rectangle(12,12,418,358, fill="#f7fafe", outline="#77aadd", width=1)
        self.card_canvas.create_text(215,36, text="XX理工大学机械工程学院学生证", font=("黑体",17,"bold"), fill="#b81020")
        self.card_canvas.create_line(45,55,385,55, fill="#003370", width=2)

        # 照片框
        self.card_canvas.create_rectangle(282,62,398,178, fill="#dde6f0", outline="#222222", width=2)
        self.card_canvas.create_text(340,120, text="证件照", font=("微软雅黑",9))

        # 个人信息文字
        font_info = ("微软雅黑", 11)
        start_y = 75
        line_spacing = 33
        text_x = 40

        self.card_canvas.create_text(text_x, start_y, text=f"姓　　名：{name}", font=font_info, anchor="w", fill="#002255")
        self.card_canvas.create_text(text_x, start_y+line_spacing, text=f"学　　号：{stu_id}", font=font_info, anchor="w", fill="#002255")
        self.card_canvas.create_text(text_x, start_y+line_spacing*2, text=f"性　　别：{gender}", font=font_info, anchor="w", fill="#002255")
        self.card_canvas.create_text(text_x, start_y+line_spacing*3, text=f"出生年月：{birthday}", font=font_info, anchor="w", fill="#002255")
        self.card_canvas.create_text(text_x, start_y+line_spacing*4, text=f"专　　业：机械设计制造及其自动化", font=font_info, anchor="w", fill="#002255")
        self.card_canvas.create_text(text_x, start_y+line_spacing*5, text=f"入学报到：{grade}级", font=font_info, anchor="w", fill="#002255")

        # 有效期与学院公章
        self.card_canvas.create_text(215, 302, text="有效期限：2026.09.01 ~ 2030.06.30", font=("微软雅黑",10), fill="#990000")
        self.card_canvas.create_oval(325,272,396,333, outline="#b81020", width=2)
        self.card_canvas.create_text(360,302, text="学院\n公章", font=("黑体",9), fill="#b81020")

        messagebox.showinfo("生成成功", "机械专业学生证预览完成！")

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