far*_*raz 19 python file tkinter
我想要做的是使用tkinter filedialog选择多个文件,然后将这些项添加到列表中.之后,我想使用列表逐个处理每个文件.
#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')
Run Code Online (Sandbox Code Playgroud)
现在,我可以选择多个文件,但我不知道如何将这些文件名添加到列表中.有任何想法吗?
A. *_*das 23
askopenfilenames返回一个字符串而不是一个列表,问题仍然在问题跟踪器中打开,到目前为止最好的解决方案是使用splitlist:
import Tkinter,tkFileDialog
root = Tkinter.Tk()
filez = tkFileDialog.askopenfilenames(parent=root,title='Choose a file')
print root.tk.splitlist(filez)
Run Code Online (Sandbox Code Playgroud)
Bel*_*ial 12
askopenfilenames
Run Code Online (Sandbox Code Playgroud)
返回一个字符串元组,而不是字符串.只需将askopenfilenames的输出存储到filez中(如您所做)并将其传递给python的list方法以获取列表.
filez = tkFileDialog.askopenfilenames(parent=root,title='Choose a file')
lst = list(filez)
>>> type(lst)
<type 'list'>
Run Code Online (Sandbox Code Playgroud)
将上述解决方案中的各个部分与几行代码组合在一起,以防止 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
Run Code Online (Sandbox Code Playgroud)
返回文件路径的列表。可以stripped使用以下代码仅显示实际文件名以供进一步使用:
fileNames = []
for path in filePaths:
name = path[46:].strip()
name2 = name[:-5].strip()
fileNames.append(name2)
fileNames
Run Code Online (Sandbox Code Playgroud)
其中整数 (46) 和 (-5) 可以根据文件路径进行更改。