【发布时间】:2013-10-28 14:45:42
【问题描述】:
我开始学习 Python,我想暂时在 Windows 操作系统下创建一个从一个文件到另一个文件的转换器(例如,从 png 到 avi 或其他文件扩展名之间)。
我编写了一个运行良好的脚本,它完成了转换过程,但我想在功能上改进它(然后在图形上);我正在使用 Tkinter,我想加载文件时可以将它们拖放为下一个转换命令的输入,而不是打开一个文件夹,将文件作为“输入源”放入其中。我找到了这个话题(python drag and drop explorer files to tkinter entry widget),我是这样使用的:
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 小部件上,则该过程开始很好(这很棒!),但它也适用于同一文件夹中具有相同扩展名的所有其他未选择文件,而如果我在条目小部件上拖放多个文件,则不会发生转换.. ..
【问题讨论】:
标签: python file-io drag-and-drop tkinter whitespace