【问题标题】:open multiple filenames in tkinter and add the filesnames to a list在 tkinter 中打开多个文件名并将文件名添加到列表中
【发布时间】:2013-05-28 10:58:14
【问题描述】:

我想要做的是选择多个文件 使用 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')

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

【问题讨论】:

    标签: python file tkinter


    【解决方案1】:

    askopenfilenames 返回一个字符串而不是一个列表,这个问题在issue tracker 中仍然存在,目前最好的解决方案是使用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')
    

    【讨论】:

    • 谢谢,帮了大忙。
    • 在这里代码的第 4 行,'root' 是什么意思?那是用户启动脚本的控制台窗口吗?
    • @danielcg 不,它是 Tkinter 应用程序的顶级(根)窗口的名称。它在执行 Python 程序的控制台旁边打开。
    • 抱歉这个愚蠢的问题哈哈,但是我如何让控制台窗口成为 askopenfilenames 对话框的父窗口?
    • 我相信这已经过时了?
    【解决方案2】:
    askopenfilenames
    

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

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

    【讨论】:

      【解决方案3】:

      将上述解决方案中的部分与几行放在一起,以防错 tkinter 文件选择对话框的代码(正如我所描述的 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
      

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

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

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

      【讨论】:

        【解决方案4】:

        在 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
        

        我希望你觉得它有用! 问候!

        【讨论】:

        • 是否有一种方法可以更改此代码,以使文件名按选择顺序存储?目前,代码仅按我的系统显示的字母数字顺序排列。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-24
        • 2018-02-28
        • 2020-05-21
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多