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()