pythonとtkinterによるドラッグアンドドロップ

コンピュータ

エクスプローラーなどからファイルをドラックアンドドロップしてファイルのパスをコンソールを出力するだけのサンプルスクリプトを動かしてみます。

サンプルスクリプト

# tkinter03.py

# ドラッグアンドドロップのサンプル

# モジュールのインストール
# pip install tkinterdnd2

import os
from tkinter import Tk
from tkinterdnd2 import DND_FILES, TkinterDnD

def drop(event):
    path = event.data
    print(f"ドロップされたパス: {path}")

root = TkinterDnD.Tk()
root.drop_target_register(DND_FILES)
root.dnd_bind('<<Drop>>', drop)

root.mainloop()

Windows

Windowsでscoopからインストールしたpythonで実行

python --version
Python 3.10.11

tkinterdnd2モジュールが見つからないエラーが発生します。

python tkinter03.py
Traceback (most recent call last):
  File "F:\python\tkinter\tkinter03.py", line 12, in 
    from tkinterdnd2 import DND_FILES, TkinterDnD
ModuleNotFoundError: No module named 'tkinterdnd2'

pipでtkinterdnd2をインストール

pip install tkinterdnd2
Collecting tkinterdnd2
  Downloading tkinterdnd2-0.4.2-py3-none-any.whl.metadata (2.7 kB)
Downloading tkinterdnd2-0.4.2-py3-none-any.whl (492 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 492.7/492.7 kB 1.5 MB/s eta 0:00:00
Installing collected packages: tkinterdnd2
Successfully installed tkinterdnd2-0.4.2


実行することが出来ました。

Ubuntu22.04

こちらでもtkinterdnd2モジュールが見つからないエラーが発生します。

python tkinter03.py
Traceback (most recent call last):
  File "/mnt/f/python/tkinter/tkinter03.py", line 11, in 
    from tkinterdnd2 import DND_FILES, TkinterDnD
ModuleNotFoundError: No module named 'tkinterdnd2'

pipでtkinterdnd2をインストール

pip install tkinterdnd2
Defaulting to user installation because normal site-packages is not writeable
Collecting tkinterdnd2
  Downloading tkinterdnd2-0.4.2-py3-none-any.whl (492 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 492.7/492.7 KB 1.8 MB/s eta 0:00:00
Installing collected packages: tkinterdnd2
Successfully installed tkinterdnd2-0.4.2


こちらでも実行することが出来ました。

感想

今回ドラックアンドドロップをする為にモジュールをインストールをしましたが、WindowsとUbuntuで同じ操作で実行することが出来ました。
Windowsのpythonのscoopでインストールした環境ではpipのみでインストールすることが出来ましたが、pip以外にも別途ファイルをインストールする必要がある場合もあるそうです。
TkDND - Browse /Windows Binaries/TkDND 2.8 at SourceForge.net
TkDND is an extension that adds native drag & drop capabilities to the Tk toolkit. It can be used with any Tk version eq...

コメント