我开始学习 Python,我想暂时在 Windows 操作系统下创建一个从文件到另一个文件的转换器(例如,从 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”希望成为我选择的所有输入文件的通用名称,并且(对于我阅读的内容)我不能(?)对希望包含文件名空格的环境变量使用引号......
我试图在同一个文件夹中复制不同的文件(具有相同的文件扩展名且文件名中没有空格),如果我只将其中一个拖放到 Entry 小部件上,则该过程开始正常(这很棒!),但它也适用于同一文件夹中具有相同扩展名的所有其他未选择文件,而如果我在条目小部件上拖放多个文件,则不会发生转换......