在Tkinter中询问多个目录对话框

时间:2015-02-09 19:21:43

标签: python python-3.x tkinter directory

我正在尝试选择多个文件夹。对于目录,我需要等效的askopenfilenames(),但只存在askdirectory(),只允许选择一个文件夹。

之前我发现了一个为Matlab(uigetdir)执行此操作的自定义脚本。 在Python中这样做的任何方式?

我需要一次批量处理大约50个文件夹中的文件,逐个选择它们是不现实的。

另外,我不是程序员,只是试图处理我的地球物理数据,不能自己编码"正如我在其他地方看到的那样。 本来可以认为这样的基本内容会包含在基本功能中。

2 个答案:

答案 0 :(得分:1)

遇到了与我开发自己的解决方案相同的问题。这样,您可以一次选择一个目录,完成后选择“取消”。

该函数返回您选择的目录的列表。

def fun_directory_selector(request_string: str, selected_directory_list: list, search_directory):
    directory_path_string = filedialog.askdirectory(initialdir=search_directory, title=request_string)

       if len(directory_path_string) > 0:
        selected_directory_list.append(directory_path_string)
        fun_directory_selector('Select the next Directory or Cancel to end', 
                               selected_directory_list,
                               os.path.dirname(directory_path_string))

    return selected_directory_list

答案 1 :(得分:0)

OP要求使用Tkinter的解决方案,该解决方案不可用但是wxPython-Phoenix可以提供解决方案

####### Retrieve a list of directories with wxPython-Phoenix   - tested on python3.5
### installation instruction for wxPython-Phoenix  : https://wiki.wxpython.org/How%20to%20install%20wxPython#Installing_wxPython-Phoenix_using_pip
### modified from : https://wxpython.org/Phoenix/docs/html/wx.lib.agw.multidirdialog.html
import os
import wx
import wx.lib.agw.multidirdialog as MDD

# Our normal wxApp-derived class, as usual
app = wx.App(0)
dlg = MDD.MultiDirDialog(None, title="Custom MultiDirDialog", defaultPath=os.getcwd(),  # defaultPath="C:/Users/users/Desktop/",
                         agwStyle=MDD.DD_MULTIPLE|MDD.DD_DIR_MUST_EXIST)

if dlg.ShowModal() != wx.ID_OK:
    print("You Cancelled The Dialog!")
    dlg.Destroy()


paths = dlg.GetPaths()

#Print directories' path and files 
for path in enumerate(paths):
    print(path[1])
    directory= path[1].replace('OS (C:)','C:')
    print(directory)
    for file in os.listdir(directory):
        print(file)

dlg.Destroy()
app.MainLoop()