概要
日々の業務でテキストファイルの編集に時間を費やしていませんか?Pythonを使えば、特定のタグをリアルタイムで編集し、その内容を簡単にクリップボードにコピーできるプログラムを作成できます。本記事では、特にプルダウン機能を利用してメールのテンプレート化や定型文書の編集に便利なプログラムを紹介します。
使用例
例えば、以下のような注文書のテンプレートがあるとします。
========================================
① 消耗品費-研究機器備品
----------------------------------------
② 品名: <品名{{消耗品,機械,食品}}>
----------------------------------------
③ 数量: <数量>
----------------------------------------
④ 単位: 1個
----------------------------------------
⑤ 単価(税抜き): <単価>円
(合計 <合計金額>円)
----------------------------------------
⑥ 納入希望日: 最短納期希望
(2024/6/25)
----------------------------------------
⑦ 発注先: 株式会社企業商事
----------------------------------------
⑧ 依頼者: <依頼者>
----------------------------------------
⑨ メーカー名: 企業製作所
製品番号: <製品番号>
見積もりNo.: なし
納品場所: 第1工場
========================================
このプログラムを使うことで、<品名{{消耗品,機械,食品}}>
のようなタグに対応する部分をGUI上でプルダウンメニューとして表示し、選択した内容がリアルタイムでテキストに反映されます。これにより、メールのテンプレート化や定型文書の編集が非常に簡単になります。
必要なプログラム
- Python 3.7以上
tkinter
ライブラリ(標準ライブラリの一部)pyperclip
ライブラリtkinterdnd2
ライブラリ
インストール方法
必要なライブラリをインストールするには、以下のコマンドを実行してください。
pip install tkinterdnd2 pyperclip
プログラム
以下のPythonスクリプトをtext_editor_app2.py
として保存してください。
import tkinter as tk
from tkinter import filedialog, messagebox
import pyperclip
import re
from tkinterdnd2 import DND_FILES, TkinterDnD
class TextEditorApp:
def __init__(self, root):
self.root = root
self.root.title("テキストファイルビューア")
# Textbox to display the content of the file
self.textbox = tk.Text(self.root, height=15, width=80)
self.textbox.pack()
# Frame to hold entry widgets
self.entry_frame = tk.Frame(self.root)
self.entry_frame.pack()
# Button to copy content to clipboard
self.copy_button = tk.Button(self.root, text="コピー", command=self.copy_to_clipboard)
self.copy_button.pack()
# Dictionary to hold entry widgets and their corresponding tags
self.entries = {}
# Enable drag-and-drop for the root window
self.root.drop_target_register(DND_FILES)
self.root.dnd_bind('<<Drop>>', self.drop)
def drop(self, event):
file_path = event.data
if file_path:
file_path = file_path.strip('{}') # Remove curly braces from the path
self.load_file(file_path)
def load_file(self, file_path):
if file_path:
with open(file_path, 'r', encoding='utf-8') as file:
self.content = file.read()
self.textbox.delete(1.0, tk.END)
self.textbox.insert(tk.END, self.content)
self.create_entries()
def create_entries(self):
# Clear any previous entries
for widget in self.entry_frame.winfo_children():
widget.destroy()
# Find all <tag> elements
tags = re.findall(r'<(.*?)>', self.content)
self.entries = {}
for tag in tags:
if '{{' in tag and '}}' in tag:
main_tag, options_str = tag.split('{{')
options_str = options_str[:-2] # remove the trailing }}
options = options_str.split(',')
frame = tk.Frame(self.entry_frame)
label = tk.Label(frame, text=f"{main_tag}:")
variable = tk.StringVar(frame)
variable.set(options[0]) # default value
option_menu = tk.OptionMenu(frame, variable, *options)
variable.trace("w", self.update_content)
label.pack(side="left")
option_menu.pack(side="left")
self.entries[tag] = variable
frame.pack()
else:
frame = tk.Frame(self.entry_frame)
label = tk.Label(frame, text=f"{tag}:")
entry = tk.Entry(frame)
entry.bind("<KeyRelease>", self.update_content)
label.pack(side="left")
entry.pack(side="left")
self.entries[tag] = entry
frame.pack()
def update_text(self):
content = self.content
for tag, widget in self.entries.items():
if isinstance(widget, tk.StringVar):
value = widget.get()
else:
value = widget.get()
content = re.sub(f"<{re.escape(tag)}>", value, content)
self.textbox.delete(1.0, tk.END)
self.textbox.insert(tk.END, content)
def copy_to_clipboard(self):
content = self.textbox.get(1.0, tk.END)
pyperclip.copy(content)
messagebox.showinfo("情報", "クリップボードにコピーされました")
def update_content(self, *args):
self.update_text()
if __name__ == "__main__":
root = TkinterDnD.Tk()
app = TextEditorApp(root)
root.mainloop()
なお、下記txtファイルをダウンロードして「.py」に書き換えて使用することもできます。
text_editor_app2
使用手順
- Pythonスクリプトの準備:
- 上記のスクリプトを
text_editor_app2.py
として保存します。
- 上記のスクリプトを
- プログラムの実行:
- コマンドラインから以下のコマンドを実行してPythonプログラムを起動します。
python text_editor_app2.py
- コマンドラインから以下のコマンドを実行してPythonプログラムを起動します。
- ドラッグアンドドロップでファイルを読み込む:
- プログラムが起動したら、編集したいテキストファイルをウィンドウ内にドラッグアンドドロップします。
- タグの編集:
- 読み込んだテキストファイル内の
<品名{{消耗品,機械,食品}}>
のようなタグが自動的に検出され、プルダウンメニューが表示されます。これらのフィールドに値を入力または選択することで、テキスト内容がリアルタイムで更新されます。
- 読み込んだテキストファイル内の
- 編集内容のコピー:
- 「コピー」ボタンをクリックすると、編集後のテキスト全体がクリップボードにコピーされます。
注意点
- テキストファイル内のタグは
<タグ{{オプション1,オプション2,オプション3}}>
の形式で記述する必要があります。 - ファイルをドラッグアンドドロップする際、対応するディレクトリへのアクセス権限が必要です。
まとめ
本記事では、テキストファイルをドラッグアンドドロップで読み込み、タグをリアルタイムで編集し、その内容をクリップボードにコピーするPythonプログラムを紹介しました。このプログラムを使用することで、プルダウン機能を利用してメールのテンプレート化や定型文書の編集作業を大幅に効率化できます。ぜひ試してみてください。