ブログページ簡易作成ツール
Posted on 2024年02月24日 (土) in 自作ツール
Pelican ブログを作るさい、コンテンツになるマークダウンに簡易的なメタデータを入力する必要があるのだが、毎回手書きするのは怠いためテンプレート用ツールを作ってみた。
コードはこの様になっている。
from tkinter import *
from tkinter import ttk
import time
from tkinter import messagebox
category_list=[カテゴリリスト]
tag_list=[タグリスト]
def create_site():
title=entry_title.get()
slug=entry_Slug.get()
summary=entry_summary.get("1.0", "end-1c")
auther="yukisakura"
date=time.strftime("%Y-%m-%d", time.localtime())
category=combo_category.get()
tags=[]
for tag in tag_list:
if globals()[tag+"_var"].get()==1:
tags.append(tag)
file_text=f"""
Title: {title}
Date: {date}
Author: {auther}
Slug: {slug}
Category: {category}
Tags: {",".join(tags)}
Summary: {summary}
# 目次
[TOC]
"""
file_name=f"{date}_{title}.md"
with open(file_name,"w",encoding="utf-8") as f:
f.write(file_text.lstrip())
messagebox.showinfo("情報", "サイトを作成しました。")
root=Tk()
root.title("Create Site")
label_title=ttk.Label(root, text="タイトル")
entry_title=ttk.Entry(root,width=100)
label_Slug=ttk.Label(root, text="スラッグ")
entry_Slug=ttk.Entry(root,width=100)
label_summary=ttk.Label(root, text="概要")
entry_summary=Text(root,width=100,height=3)
label_category=ttk.Label(root, text="カテゴリー")
combo_category=ttk.Combobox(root, values=category_list,state="readonly")
label_tags=ttk.Label(root, text="タグ")
frame=ttk.Frame(root)
for i,tag in enumerate(tag_list):
globals()[tag+"_var"]=IntVar()
globals()[tag+"_var"].set(0)
globals()["check_"+tag]=ttk.Checkbutton(frame, text=tag, variable=globals()[tag+"_var"], onvalue=1, offvalue=0)
globals()["check_"+tag].grid(row=i//3,column=i%3)
label_title.grid(row=0, column=0)
entry_title.grid(row=0, column=1)
label_Slug.grid(row=1, column=0)
entry_Slug.grid(row=1, column=1)
label_summary.grid(row=2, column=0,columnspan=2)
entry_summary.grid(row=3, column=0,columnspan=2)
label_category.grid(row=4, column=0,columnspan=2)
combo_category.grid(row=5, column=0,columnspan=2)
label_tags.grid(row=6, column=0,columnspan=2)
frame.grid(row=7, column=0,columnspan=2)
button=ttk.Button(root, text="作成", command=create_site)
button.grid(row=8, column=0,columnspan=2)
root.mainloop()
標準ライブラリでだけで作っており、構造も単純であるためカスタマイズを必要に応じて行える。