工作日志生成器

from datetime import datetime, timedelta
import calendar
from tkinter import filedialog, Tk, Label, Entry, Button
from tkinter.messagebox import showinfo

def generate_table():
    date_str = date_entry.get()
    try:
        date = datetime.strptime(date_str, "%Y%m")
        year = date.year
        month = date.month
    except ValueError:
        info_label.config(text="日期输入不合法")
        return

    start_date = datetime(year, month, 1)
    if start_date.weekday() >= 5:
        start_date += timedelta(days=7 - start_date.weekday())

    _, last_day = calendar.monthrange(year, month)
    end_date = datetime(year, month, last_day)
    if end_date.weekday() >= 5:
        end_date -= timedelta(days=end_date.weekday() - 4)

    table_header = "| 周几       | 日期文件  | 主要内容 |\n| --------- | ------- | -------- |\n"

    markdown_content = ""
    date = start_date
    while date <= end_date:
        if date.weekday() < 5:
            if date.weekday() == 0:
                markdown_content += table_header

            date_str = date.strftime("%Y%m%d")
            link = f"[{date_str}](./{date_str})"
            weekday = date.strftime("%A")
            markdown_content += f"| {weekday} | {' '.join(link.split())} | |\n"

            if date.weekday() == 4:
                markdown_content += ">每周小结: \n" + "--- \n"
        date += timedelta(days=1)

    table_template = f"{table_header}{markdown_content}"

    default_filename = f"{year}{month}.md"

    try:
        save_file_path = filedialog.asksaveasfilename(defaultextension=".md", initialfile=default_filename, filetypes=[("Markdown Files", "*.md")])

        if save_file_path:
            with open(save_file_path, "w", encoding="utf-8") as file:
                file.write(table_template)
            showinfo("提示", f"已保存到:{save_file_path}")
        else:
            info_label.config(text="未保存")
    except:
        info_label.config(text="保存失败")

def on_date_entry_key(event):
    if event.keysym == 'Return':
        generate_table()

window = Tk()
window.title("日期生成器")

date_label = Label(window, text="日期(年-月):")
date_label.grid(row=0, column=0)
date_entry = Entry(window)
date_entry.grid(row=0, column=1)
date_entry.bind('<Key>', on_date_entry_key)

generate_button = Button(window, text="生成日期表格", command=generate_table)
generate_button.grid(row=1, columnspan=2)

info_label = Label(window, text="")
info_label.grid(row=2, columnspan=2)

window.mainloop()