faraz
faraz

Reputation: 2733

open multiple filenames in tkinter and add the filesnames to a list

what I want to do is to select multiple files using the tkinter filedialog and then add those items to a list. After that I want to use the list to process each file one by one.

#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')

Now, I am able to select multiple files, but I dont know how to add those filenames to the list. any ideas?

Upvotes: 31

Views: 78751

Answers (4)

A. Rodas
A. Rodas

Reputation: 20679

askopenfilenames returns a string instead of a list, that problem is still open in the issue tracker, and the best solution so far is to use splitlist:

import Tkinter,tkFileDialog

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

Python 3 update:

tkFileDialog has been renamed, and now askopenfilenames directly returns a tuple:

import tkinter as tk
import tkinter.filedialog as fd

root = tk.Tk()
filez = fd.askopenfilenames(parent=root, title='Choose a file')

Upvotes: 42

juanpb12
juanpb12

Reputation: 145

In Python 3, the way it worked for me was this (respect lowercase):

from tkinter.filedialog import askopenfilenames

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

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

I hope you find it useful! Regards!

Upvotes: 0

mvx
mvx

Reputation: 370

Putting together parts from above solution along with few lines to error proof the code for tkinter file selection dialog box (as I also described here).

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

Returns a list of the paths of the files. Can be stripped to show only the actual file name for further use by using the following code:

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

where the integers (46) and (-5) can be altered depending on the file path.

Upvotes: 7

Belial
Belial

Reputation: 851

askopenfilenames

returns a tuple of strings, not a string. Simply store the the output of askopenfilenames into filez (as you've done) and pass it to the python's list method to get a list.

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

>>> type(lst)
<type 'list'>

Upvotes: 18

Related Questions