ファイルをドラッグアンドドロップするだけで結果が見えるプログラムを作りたい!
ファイルを加工したいとき、ファイルを分析したいとき、投げ込むだけで動作する方が効率的だと思ったのでまずは雛形を作ってみました!
実行環境
- OS
- Windows 10
- python
- 3.9.13
- tkinter
- tkinterDnD2
- 3.9.13
環境作成
Miniconda(Anaconda) を使って環境作成を行いました。
pip で tkinterdnd2 をインストールしています。
conda create -n dev39 python=3.9 pyinstaller
conda activate dev39
pip install tkinterdnd2
コード
以下に、作成したコードを記載します。
実行と加工は自己責任でお願いします。
import tkinter as tk
from tkinterdnd2 import DND_FILES, TkinterDnD
class MyApp(TkinterDnD.Tk):
def __init__(self):
super().__init__()
## ウィンドウサイズ
width = 300
height = 100
self.geometry(f'{width}x{height}')
self.minsize(width, height)
self.maxsize(width, height)
self.title(f'DnD')
## フレーム
self.frame_drag_drop = frameDragAndDrop(self)
## 配置
self.frame_drag_drop.grid(column=0, row=0, padx=5, pady=5, sticky=(tk.E, tk.W, tk.S, tk.N))
self.columnconfigure(0, weight=1)
self.rowconfigure(0, weight=1)
class frameDragAndDrop(tk.LabelFrame):
def __init__(self, parent):
super().__init__(parent)
self.textbox = tk.Text(self)
self.textbox.insert(0.0, "Drag and Drop")
self.textbox.configure(state='disabled')
## ドラッグアンドドロップ
self.textbox.drop_target_register(DND_FILES)
self.textbox.dnd_bind('<<Drop>>', self.funcDragAndDrop)
## スクロールバー設定
self.scrollbar = tk.Scrollbar(self, orient=tk.VERTICAL, command=self.textbox.yview)
self.textbox['yscrollcommand'] = self.scrollbar.set
## 配置
self.textbox.grid(column=0, row=0, sticky=(tk.E, tk.W, tk.S, tk.N))
self.scrollbar.grid(row=0, column=1, sticky=(tk.N, tk.S))
self.columnconfigure(0, weight=1)
self.rowconfigure(0, weight=1)
def funcDragAndDrop(self, e):
## ここを編集してください
message = '\n' + e.data
self.textbox.configure(state='normal')
self.textbox.insert(tk.END, message)
self.textbox.configure(state='disabled')
self.textbox.see(tk.END)
if __name__ == "__main__":
app = MyApp()
app.mainloop()
実行結果
ファイルを投入すると、ファイル名を取得して textbox へ追加します。
そのため、funcDragAndDrop
を編集すれば、ファイルを投入すると必要な結果が帰ってくるアプリケーションになる...はずです。
exe 化
pyinstaller を使って exe 化も試してみました。
--collect-data
がないと tkinterdnd2 がパッケージングされないのかエラーが表示されてしまいました。
pyinstaller tksample.py --onefile --noconsole --collect-data tkinterdnd2