

「マウスでドラッグ＆ドロップされたファイルをソフトウェアに読み込む」という処理を行いたいです。

PythonでWindowsまたはMacでのマウス操作を監視して  
・デスクトップ等でファイルがクリックされたことを検知  
・ファイルパスを取得  
・マウスが離されたことを検知

のような処理を書く方法はありますでしょうか？


CC BY-SA 4.0
2022-01-25T04:03:07.463
85916
2022-01-25T10:02:43.160
2022-01-25T06:58:56.720
36446
36446
question
python
Pythonでマウス操作を監視し、選択されたファイルのパスをチェックする方法


マウス操作を監視するのではなく、PythonのGUIアプリケーションにマウスでドラッグ＆ドロップされたファイルを読み込む処理ならばファイルダイアログを開かずにファイルを取り扱うことができます。  
そのためには[TkDND](https://www.ellogon.org/petasis/index.php/tcltk-
projects/tkdnd)などの外部パッケージが必要です。(事前準備を参照してインストールしてください)

参考資料:
[【Python】tkinter：ファイルのドラッグアンドドロップ（パス取得、画像表示）](https://office54.net/python/tkinter/file-
drag-drop)

**事前準備**

[code]

    pip install tkinterdnd2
    
[/code]

**サンプルコード**

[code]

    import tkinter as tk
    from tkinter import ttk
    from tkinterdnd2 import TkinterDnD as tdnd
    from tkinterdnd2 import DND_FILES
    
    # ドロップイベント
    def drop(event: tdnd.DnDEvent):
        label = event.widget
        label.configure(text = event.data)
        print(label.labelText)
    
    w = tdnd.Tk()
    label = ttk.Label(w, text="ここにファイルをドロップすると\nパスを表示します")
    label.pack(fill=tk.BOTH, expand=True)
    label.grid(row=0, column=0)
    
    # ラベルをファイルのドラッグアンドドロップに対応させる
    label.drop_target_register(DND_FILES)
    label.dnd_bind('<<Drop>>', drop)
    
    w.mainloop()
    
[/code]

以下はPCに詳しい人向けの蛇足です。

デスクトップやエクスプローラで、どのファイルがクリックやドロップされたのかを検知する実装はあまり現実的ではありません。  
[pynput](https://pypi.org/project/pynput/)などの外部パッケージでマウスの動作を監視できますが、クリック位置情報からファイルパスを取得する処理がとても難しいです。

画面ではなく特定のフォルダにドラッグアンドドロップやコピーしたことを検知する実装で代替可能ならば[Watchdog](https://pythonhosted.org/watchdog/)パッケージを導入してフォルダ監視する方法もあります。

D&Dは案外操作コストが高いので、Windowsならば右クリックの「送る」メニューにPythonプログラムを配置して、引数で受け取ったフルパスを処理する方法も実用に耐えるかもしれません。  
ただしWindows11標準のコンテキストメニューでは「送る」メニューが隠れていて(未確認)結局使いにくいような…。


CC BY-SA 4.0
2022-01-25T10:02:43.160
85926
2022-01-25T10:02:43.160
9820
85916
answer