在Python(Windows)中拖放多个文件

2024-06-02 17:50:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始学习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()

问题是:

  1. 如果文件名有空格,则不会进行转换,并且进程结束时甚至不会通知任何错误。”inputfilespath“希望成为我选择的所有输入文件的通用名称,并且(对于我读到的内容)我不能(?)对希望包含文件名空白的环境变量使用引号。。。

  2. <> >我尝试在同一个文件夹中复制不同文件(文件名相同,没有空白),如果我在条目窗口中拖放其中一个文件,程序就开始了(太好了!),但对于同一文件夹中具有相同扩展名的所有其他未选定文件也会继续,而如果我在条目小部件上拖放多个文件,则不会发生转换。。。。


Tags: 文件pathimport文件夹eventostkinter文件名
2条回答

只需使用tkinter文件对话框,然后让它将文件插入到输入框中。在

示例:

filedialog = tkFileDialog.askopenfilenames(*options*)
entry.insert(END, filedialog)

使用StringVar的示例:

^{pr2}$

希望这有帮助!在

似乎包含空白的文件名用大括号括起来 (Tcl列表样式)。你应该可以得到一个可用的文件列表 比如:

import Tkinter
from untested_tkdnd_wrapper import TkDND


def handle(event):
    files = root.tk.splitlist(event.data)

    for filename in files:
        event.widget.insert('end', filename)


root = Tkinter.Tk()    
lb   = Tkinter.Listbox(root, width=50)
lb.pack(fill='both', expand=1)

dnd = TkDND(root)
dnd.bindtarget(lb, handle, 'text/uri-list')

root.mainloop()

相关问题 更多 >