私はPythonを学び始めており、Windows OSの下で、ファイルから別のファイルへのコンバーターを作成することを考えました(たとえば、pngからaviへ、または他のファイル拡張子間で)。
正常に動作するスクリプトを作成し、変換プロセスを完了しましたが、機能 (およびグラフィックス) を改善したいと考えています。私はTkinterを使用しており、ファイルを「入力ソース」として配置するフォルダーを開く代わりに、次の変換コマンドの入力としてドラッグアンドドロップできるようにファイルをロードすることを考えました。私はこのトピックを見つけました ( python エクスプローラー ファイルを tkinter エントリ ウィジェットにドラッグ アンド ドロップします)。
import sys
import os
import Tkinter
from tkdnd_wrapper import TkDND
import shlex, subprocess
from subprocess import Popen, PIPE
import glob
import shutil
root = Tkinter.Tk()
dnd = TkDND(root)
entry = Tkinter.Entry()
entry.grid()
def handle(event):
inputfilespath = event.data
event.widget.insert(0, inputfilespath)
filesdir = os.path.dirname(os.path.realpath(inputfilespath))
files = glob.iglob(os.path.join(filesdir, "*.myext"))
for inputfilespath in files:
if os.path.isfile(inputfilespath):
subprocess1 = subprocess.Popen([...conversion command given as list, not string...], shell=True)
print "\n\nConversione in corso..."
subprocess1.wait()
subprocess1.terminate()
print "\n\nProcesso terminato!"
dnd.bindtarget(entry, handle, 'text/uri-list')
root.mainloop()
問題点:
ファイル名にスペースが含まれている場合、変換は行われず、エラーも通知されずにプロセスが終了します。「inputfilespath」は、選択したすべての入力ファイルの一般的な名前になりたいのですが、(私が読んだことについて)ファイル名の空白を含めることを望んでいる環境変数に引用符を使用することはできません...
同じフォルダに別のファイルをコピーしようとしました (ファイル拡張子は同じで、ファイル名に空白はありません)。そのうちの 1 つだけをエントリ ウィジェットにドラッグ アンド ドロップすると、プロセスは正常に開始されます (これは素晴らしいことです)。 !)、しかし、同じフォルダー内の同じ拡張子を持つ他のすべての選択されていないファイルについても継続しますが、エントリウィジェットに複数のファイルをドラッグアンドドロップすると、変換は行われません....