24

我想要做的是使用 tkinter 文件对话框选择多个文件,然后将这些项目添加到列表中。之后,我想使用列表一个一个地处理每个文件。

#replace.py
import string
def main():
        #import tkFileDialog
        #import re
        #ff = tkFileDialog.askopenfilenames()
        #filez = re.findall('{(.*?)}', ff)
        import Tkinter,tkFileDialog
        root = Tkinter.Tk()
        filez = tkFileDialog.askopenfilenames(parent=root,title='Choose a file')

现在,我可以选择多个文件,但我不知道如何将这些文件名添加到列表中。有任何想法吗?

4

4 回答 4

30

askopenfilenames返回一个字符串而不是列表,该问题仍然在问题跟踪器中打开,到目前为止最好的解决方案是使用splitlist

import Tkinter,tkFileDialog

root = Tkinter.Tk()
filez = tkFileDialog.askopenfilenames(parent=root, title='Choose a file')
print root.tk.splitlist(filez)

Python 3 更新:

tkFileDialog已经改名了,现在askopenfilenames直接返回一个元组:

import tkinter as tk
import tkinter.filedialog as fd

root = tk.Tk()
filez = fd.askopenfilenames(parent=root, title='Choose a file')
于 2013-05-28T12:10:37.507 回答
17
askopenfilenames

返回字符串元组,而不是字符串。只需将 askopenfilenames 的输出存储filez 中(就像您所做的那样)并将其传递给 python 的list方法以获取列表。

filez = tkFileDialog.askopenfilenames(parent=root,title='Choose a file')
lst = list(filez)

>>> type(lst)
<type 'list'>
于 2015-09-28T13:12:08.313 回答
4

将上述解决方案中的部分与几行组合在一起,以防错 tkinter 文件选择对话框的代码(正如我在此处所描述的那样)。

import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()
root.call('wm', 'attributes', '.', '-topmost', True)
files = filedialog.askopenfilename(multiple=True) 
%gui tk
var = root.tk.splitlist(files)
filePaths = []
for f in var:
    filePaths.append(f)
filePaths

返回文件路径的列表。可以stripped使用以下代码仅显示实际文件名以供进一步使用:

fileNames = []
for path in filePaths:
    name = path[46:].strip() 
    name2 = name[:-5].strip() 
    fileNames.append(name2)
fileNames

其中整数 (46) 和 (-5) 可以根据文件路径进行更改。

于 2019-09-04T13:40:36.363 回答
0

在 Python 3 中,它对我的​​工作方式是这样的(尊重小写):

from tkinter.filedialog import askopenfilenames

filenames = askopenfilenames(title = "Open 'xls' or 'xlsx' file") 

for filename in filenames:
    # print or do whatever you want

希望对你有帮助!问候!

于 2020-06-04T20:40:49.330 回答