初めてPythonの記事を載せてみようと思います。
大それたものを紹介するものではないということを念頭に入れて頂き、温かい目で見守って頂けると助かります。独学、趣味の一環なので分からないところなどはAIに頼ったりもします。
※本ページの内容を利用したことによって生じたいかなる損害についても、当方は責任を負いかねます。掲載内容の正確性や動作を保証するものではありません。ご利用の際はご自身の判断と責任でお願いいたします。
今回のツール
今回作ったツールは下記。

1.テキストを張り付けたい箇所にカーソルを合わせておく

2.ツールのボタンを押す。

3.ボタンに紐づいたテキストがペーストされる。
ここでは ”おねこ” のボタンに ”吾輩はトラである” を紐づけている。
あらかじめ設定しておいた所定の文字を張り付けるツールである。(これくらいのレベルです。。)
きっかけ 旅行の予約にて
ツールの解説、コードの方に飛ぶ場合はこちらへ。
———————————————————————————————-
海外に旅行しようと計画していたある日の会話

飛行機の予約お願い。あと旅行先の美術館の予約もして~。

はいよー、まかされよ。
ということで、パソコンで航空券や観光先の予約をすることになったおねこだったのだが、下記の2つの問題に直面し苦しむことになった。
一つ目は、予約サイトに存在する ”制限時間” である。
15分以内に予約情報を入力して決済まで行わないと、それまでに入力した情報がすべてリセットされ最初から入力しなおす必要がある、、、といったようなサイトがある。
”3分間待ってやる” と言われ、その間スピーディーにおばさんたちを助けたことと滅びの言葉を共有しなければならない状況と似ている。

全然違うでしょ
おねこは何度も失敗した。苦手な英語のサイトを読み解きながら予約するのは一筋縄ではない。。

ガガーンッ、 全部消えた。。 ショック。
2つ目が、予約の最後に行われるクレジットカード決済である。海外サイトではカードによってはうまく決済が通らずにこれまた振り出しに戻されるパターンも多い。この2重苦により、住所、氏名、パスポート番号やらを家族分含めて何度も入力しなおすことになった。

キエェーーっ、発狂ー!! やってられん!!!
ブラウザが入力内容を覚えてくれる場合もあるが、おねこ的にはブラウザに重要情報は保存したくない性分である。

いや、ブラウザの機能使えばいいじゃん。。

・・・
不毛な作業に終止符を打つべく、改善策を考え始めた。

ローカルのメモ帳にあらかじめ記載しておいて、コピペすれば楽じゃん
この安易な案でメモ帳に書き出してみたのだが、ウィンドウを切り替えてメモ帳からテキストを選んでコピー&ペーストという操作が地味に面倒くさかった。もっとテンポよく40秒で支度できるくらいのスピード感がほしい。

・・・・・Pythonに頼ろう
とまあ、こんな流れで表題のツール検討をすることに至っている。
今回はExcelで作業というわけでもないのでPythonでこの辺もう少し楽が出来ないかと考えたのであった。
テキストのペーストツールの構成
設計構想は以下。
1.ボタン名とペーストしたいテキストを定義したテキストファイルを用意
2.テキストファイルを読み込み、ボタン名に基づいたボタンUIのフォームをPythonで生成する。
3.ボタンを押すと、紐づいたテキストがペーストされる
わざわざテキストファイルに定義することにしたのは、ツールに柔軟性を持たせるため。 プログラム内で文言を定義すると語句の入れ替え時などメンテナンスが手間。個人情報などを扱う場合にプログラム内に直接記述するのを避けたかった。

一応考えてるんだね。

なんとなくね。
定義テキストファイルの作成
ボタン名と貼り付けたいテキストをタブ区切りで定義。1行につき1セットとする。
例:ボタン名+タブ+入力テキスト

といった感じでテキストファイルを用意する。ファイル名はひとまずinputdata.txtとしている。
このテキストファイルはPythonコードと同じフォルダに置いておく。
Python側のコード
import tkinter as tk
import pyautogui
import clipboard
import time
def load_keywords_from_file(filename):
keywords = {}
with open(filename, encoding='utf-8') as f:
for line in f:
if '\t' in line:
label, value = line.strip().split('\t', 1)
keywords[label] = value
return keywords
def type_into_previous_window(text):
clipboard.copy(text)
time.sleep(0.1)
pyautogui.keyDown('alt')
pyautogui.press('tab')
pyautogui.keyUp('alt')
time.sleep(0.1)
pyautogui.hotkey('ctrl', 'v')
# ファイルからキーワードを読み込む
data = load_keywords_from_file("inputdata.txt")
# GUI作成
app = tk.Tk()
app.title("フォーム入力ツール")
app.attributes("-topmost", True)
for label, value in data.items():
btn = tk.Button(app, text=label, width=25, command=lambda v=value: type_into_previous_window(v))
btn.pack(pady=5)
app.mainloop()
これを実行すると、最初に作ったテキストファイルを読み込み、ボタンを実装したフォームが立ち上がる。

補足
テキストファイルからボタン名と貼り付けテキストを読み込み処理の関数
def load_keywords_from_file(filename):
ボタンを押されたときにテキストを貼り付ける処理を行う関数
def type_into_previous_window(text):
テキスト貼り付け時の操作の想定としては、入力したいウィンドウのターゲットの場所にあらかじめカーソルを当てアクティブにしたあと、フォームのボタンを押す。
ボタンを押した後にどうやってターゲットの場所へテキストを貼るか?というところを考えなければならなかったのだが、これを下記の処理で対応した。
time.sleep(0.1)
pyautogui.keyDown('alt')
pyautogui.press('tab')
pyautogui.keyUp('alt')
time.sleep(0.1)
ボタンを押した時点でアクティブウィンドウがPythonのこのペーストツール(フォーム)になってしまうので、テキストを張り付ける処理の前に、1つ前のウィンドウへ戻る処理を入れている。
(windowsの alt + tab で一つ前の画面に戻る操作)
また下記でこのフォームを常に画面の最前面に出すようにし、フォームが他のウィンドウに埋もれるのを防ぐようにした。
app.attributes("-topmost", True)
その後
このペーストツールを使うことで予約の際の入力は多少楽になり、以降、他の予約サイトでも活用した。

っていうかブラウザには個人情報残していないけど、テキストファイルに個人情報残してるのはいいの?

お、終わったらテキストファイルを削除します!
蛇足
このツール、近くの医院の予約の際にもちょっと役にたった。
観光地の予約とは異なり、予約開始から10秒以内が勝負となるのが上記の予約。
ここに限って言うと40秒も待っているようであれば敗者確定である。
実際に経験した例を挙げると、

病院朝一に行きたいなぁ。Web予約開始と同時に予約してすぐ行こう。
予約開始と同時に、必死に診察券番号など入力、、カタカタカタカタ、、ボタンを連打。

よしっ、受付完了!!
で、その直後にビックリする。

受付番号46番。。。。。 ま、マジで?
みんなどれだけ入力が早いんだろう。診察開始から自分が診察を受けれるまで一時間以上の待ちが確定なのである。
同様なのが受験に向けた学校見学などの申込み。人気校の見学会の申し込みなども、あっさり定員数に到達して見学できなくなるなんてことがあった。
以上。

