import tkinter as tk
from tkinter import ttk

# 课程初始数据，7节课，周一到周日
week_title = ["节次", "周一", "周二", "周三", "周四", "周五", "周六", "周日"]
# 初始化空课程表
course_data = [
    ["第1节", "", "", "", "", "", "", ""],
    ["第2节", "", "", "", "", "", "", ""],
    ["第3节", "", "", "", "", "", "", ""],
    ["第4节", "", "", "", "", "", "", ""],
    ["第5节", "", "", "", "", "", "", ""],
    ["第6节", "", "", "", "", "", "", ""],
    ["第7节", "", "", "", "", "", "", ""],
]


class CourseTableApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Tkinter 课程表")
        self.root.geometry("900x450")

        # 存储所有单元格组件
        self.cells = []

        # 构建表格
        for row_idx in range(len(course_data)):
            row_widgets = []
            for col_idx in range(len(week_title)):
                if row_idx == 0:
                    # 表头
                    label = ttk.Label(root, text=week_title[col_idx], font=("微软雅黑", 11, "bold"),
                                      borderwidth=1, relief="solid", anchor="center")
                    label.grid(row=row_idx, column=col_idx, sticky="nsew", padx=1, pady=1)
                else:
                    # 可点击编辑单元格
                    text_var = tk.StringVar(value=course_data[row_idx][col_idx])
                    label = ttk.Label(root, textvariable=text_var, font=("微软雅黑", 10),
                                      borderwidth=1, relief="solid", anchor="center")
                    label.grid(row=row_idx, column=col_idx, sticky="nsew", padx=1, pady=1)
                    # 单击编辑
                    label.bind("<Button-1>", lambda e, r=row_idx, c=col_idx: self.edit_cell(r, c))
                    row_widgets.append(text_var)
            if row_idx != 0:
                self.cells.append(row_widgets)

        # 网格权重，自适应拉伸
        for i in range(8):
            self.root.grid_columnconfigure(i, weight=1)
        for i in range(8):
            self.root.grid_rowconfigure(i, weight=1)

        # 底部按钮区域
        frame_bottom = ttk.Frame(root)
        frame_bottom.grid(row=8, column=0, columnspan=8, pady=8)
        ttk.Button(frame_bottom, text="清空全部", command=self.clear_all).pack(side="left", padx=10)

    def edit_cell(self, row, col):
        """弹窗编辑单元格内容"""
        popup = tk.Toplevel(self.root)
        popup.title("编辑课程")
        popup.geometry("280x130")
        popup.transient(self.root)
        popup.grab_set()

        ttk.Label(popup, text="输入课程名称：", font=("微软雅黑",10)).pack(pady=10)
        entry = ttk.Entry(popup, font=("微软雅黑",11))
        entry.pack(pady=2, fill="x", padx=20)
        # 获取原有内容
        old_text = self.cells[row-1][col-1].get()
        entry.insert(0, old_text)

        def save():
            new_text = entry.get()
            self.cells[row-1][col-1].set(new_text)
            popup.destroy()

        ttk.Button(popup, text="保存", command=save).pack(pady=10)

    def clear_all(self):
        """清空所有课程"""
        for row in self.cells:
            for cell_var in row:
                cell_var.set("")


if __name__ == "__main__":
    win = tk.Tk()
    app = CourseTableApp(win)
    win.mainloop()
