Pythonツール ドラッグアンドドロップ(単一ファイル) 文字列挿入

Pythonでテキストファイルを簡単編集!その2:プルダウン機能でメールのテンプレート化も楽々

概要

日々の業務でテキストファイルの編集に時間を費やしていませんか?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」に書き換えて使用することもできます。

使用手順

  1. Pythonスクリプトの準備:
    • 上記のスクリプトをtext_editor_app2.pyとして保存します。
  2. プログラムの実行:
    • コマンドラインから以下のコマンドを実行してPythonプログラムを起動します。
      python text_editor_app2.py
  3. ドラッグアンドドロップでファイルを読み込む:
    • プログラムが起動したら、編集したいテキストファイルをウィンドウ内にドラッグアンドドロップします。
  4. タグの編集:
    • 読み込んだテキストファイル内の<品名{{消耗品,機械,食品}}>のようなタグが自動的に検出され、プルダウンメニューが表示されます。これらのフィールドに値を入力または選択することで、テキスト内容がリアルタイムで更新されます。
  5. 編集内容のコピー:
    • 「コピー」ボタンをクリックすると、編集後のテキスト全体がクリップボードにコピーされます。

注意点

  • テキストファイル内のタグは<タグ{{オプション1,オプション2,オプション3}}>の形式で記述する必要があります。
  • ファイルをドラッグアンドドロップする際、対応するディレクトリへのアクセス権限が必要です。

まとめ

本記事では、テキストファイルをドラッグアンドドロップで読み込み、タグをリアルタイムで編集し、その内容をクリップボードにコピーするPythonプログラムを紹介しました。このプログラムを使用することで、プルダウン機能を利用してメールのテンプレート化や定型文書の編集作業を大幅に効率化できます。ぜひ試してみてください。

-Pythonツール, ドラッグアンドドロップ(単一ファイル), 文字列挿入