🧠 概要:
概要
この記事では、PythonのTkinterを使用して作成した「操作ログ管理アプリ」の説明が行われています。このアプリは、キーボード操作とマウスクリックのログをリアルタイムで表示し、CSV形式で出力する機能を持っています。また、著者はChatGPTにプログラミングのサポートを受けて、アプリの機能を実装しています。
要約の箇条書き
- アプリの目的: Tkinterを利用してキーボードとマウスの操作ログを記録するアプリ。
- 基本機能:
- キーボード操作やマウスクリックのログをリアルタイムで表示。
- ログデータをCSV形式で保存する機能。
- ChatGPTの利用: アプリの開発においてChatGPTに指示を出し、ソースコードを生成してもらった。
- 動作確認: アプリを実行し、ログ出力の確認が行われた。
- CSV出力内容: アプリ起動から終了までの操作ログがCSVファイルとして出力できる。
- 今後の挑戦: 著者は今後さらに90個のTkinterアプリを作成する意欲を示している。
- バグ探査の重要性: 操作ログは、バグの特定や原因解析に有効であると述べられている。
作り続けたら早10個目になりました。
10個のアプリはtkinter上でキー操作とマウスクリックをすると、ログが画面の右に表示され、そのログはCSVで出力できるというログ管理アプリです。
早速ChatGPTに以下の命令をしました。
tkinterでキーボードとマウスで操作したログを取れるようにしたい。tkinterの画面上でキーボードもしくはマウス操作が1回行われた場合、出力を画面右側のテキストにログインユーザーと操作を1行追加して、どんどんスクロールするようにしたい。(例:ユーザー:Y)ただしマウスはスクロールのログは取らず、クリックのログだけ取るようにしたい。テキストの履歴はCSVで取れるようにしたいので、「ログをCSVに出力」ボタンを押したらテキストの履歴をCSVで取るようにする。
ログをCSVに出力の条件があって、tkinter起動中のものだけCSVにログを出力することとする。つまり一旦tkinterを終了して再度起動した場合は、一旦終了したtkinterのログは取らないものとする。
ChatGPTへの命令
そこでできあがったソースが以下です。
import tkinter as tkfrom tkinter import ttk, filedialogimport csvimport getpassfrom datetime import datetime class InteractionLoggerApp: def __init__(self, root): self.root = root self.root.title("操作ログアプリ") self.username = getpass.getuser() self.logs = [] self.build_ui() self.bind_events() def build_ui(self): main_frame = ttk.Frame(self.root, padding=10) main_frame.pack(fill=tk.BOTH, expand=True) ttk.Label(main_frame, text="操作してください").pack(side=tk.LEFT, padx=10) self.log_text = tk.Text(main_frame, width=50, height=20, state='disabled', wrap='none') self.log_text.pack(side=tk.RIGHT, padx=10, fill=tk.Y, expand=True) scrollbar = ttk.Scrollbar(main_frame, command=self.log_text.yview) self.log_text['yscrollcommand'] = scrollbar.set scrollbar.pack(side=tk.RIGHT, fill=tk.Y) ttk.Button(self.root, text="ログをCSVに出力", command=self.export_to_csv).pack(pady=10) def bind_events(self): self.root.bind_all("<Key>", self.log_key_event) self.root.bind_all("<Button-1>", self.log_mouse_click) self.root.bind_all("<Button-2>", self.log_mouse_click) self.root.bind_all("<Button-3>", self.log_mouse_click) def log_event(self, description): timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") log_line = f"{timestamp},ユーザー:{self.username},{description}" self.logs.append(log_line) self.log_text.configure(state='normal') self.log_text.insert(tk.END, log_line + "n") self.log_text.see(tk.END) self.log_text.configure(state='disabled') def log_key_event(self, event): if event.char.strip(): desc = f"キー入力:{event.char}" else: desc = f"キー入力(特殊キー):{event.keysym}" self.log_event(desc) def log_mouse_click(self, event): button_name = {1: "左クリック", 2: "中クリック", 3: "右クリック"}.get(event.num, f"ボタン{event.num}") self.log_event(f"マウス:{button_name}") def export_to_csv(self): if not self.logs: return filepath = filedialog.asksaveasfilename( defaultextension=".csv", filetypes=[("CSVファイル", "*.csv")], title="CSVファイルに保存" ) if filepath: with open(filepath, "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(["日時", "ユーザー", "操作"]) for log in self.logs: parts = log.split(",", 2) if len(parts) == 3: writer.writerow(parts) if __name__ == "__main__": root = tk.Tk() app = InteractionLoggerApp(root) root.mainloop()
実際動かしてみました。
操作ログアプリ
画面左の「操作してください」の部分でキーボードもしくはマウスをクリックすることで、画面右に日時とユーザー名、キー操作が表示されます。
また下の「ログをCSVに出力」ボタンを押すと、文字どおりCSVファイルに出力されます。
これはアプリ起動から終了までの操作ログになります。
CSVの中身は以下です。
操作ログのCSVファイル中身
ちゃんと操作ログがCSVとして出力されています。
よくバグの探索のために、ログ出力などをするため、基礎的なところですがChatGPTにお願いして作成してもらいました。
ここまではパッと思いついたものを作りましたが、あと90個tkinterアプリを作り続けることができるでしょうか?
ここまできたらやり抜きたいと思います。
操作動画は以下です。
今回はChatGPTを使って操作ログを出力するアプリを作りました。(tkinterアプリ10個目) よく情報システムなどでは、このような操作ログを取って、原因を特定することをするので自分もtkinterでできないかChatGPTにお願いしたところ、しっかりとしたソースコードを提供してくれました。 操作ログをCSVファイルに出力することもでき、これを標準でアプリに組み込むと、もしかしたらバグなどの原因を特定しやすくなるかもしれません。(素人目線) #100個チャレンジ#tkinter#Python#ChatGPT
— 神経質やせ男 (@wwphilosophy.bsky.social) 2025-05-19T22:01:48.987Z
Views: 0