You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改PySimpleGUI示例代码实现主文件夹下子文件夹多选列表功能

实现方案

原来的get_file_list_dict函数核心逻辑是递归遍历所有目录层级筛选py文件,和你需要的「仅获取一级子文件夹」需求完全不匹配,直接重构逻辑更简单,具体步骤如下:

1. 新增主文件夹选择功能

在原界面中添加PySimpleGUI的文件夹选择组件,示例代码如下:

# 加入到你的布局代码里
layout = [
    [sg.Text('选择主文件夹:'), sg.Input(key='-FOLDER_PATH-'), sg.FolderBrowse()],
    [sg.Button('加载子文件夹')],
    # 其他原有组件...
]

用户选择完成后,通过values['-FOLDER_PATH-']就能拿到选中的主文件夹路径。

2. 重写子文件夹获取逻辑

不需要修改原有get_file_list_dict,直接写新的函数仅遍历主文件夹第一层,获取所有子文件夹:

def get_first_level_subfolders(parent_path):
    """
    获取指定目录下的所有一级子文件夹
    :param parent_path: 手动选择的主文件夹路径
    :return: 字典,key为子文件夹名称,value为子文件夹完整路径
    """
    subfolder_map = {}
    # 仅遍历第一层目录,不递归
    for item in os.scandir(parent_path):
        if item.is_dir():
            # 兼容重名逻辑,和原代码逻辑对齐
            if item.name not in subfolder_map:
                subfolder_map[item.name] = item.path
            else:
                for i in range(1, 100):
                    new_name = f"{item.name}_{i}"
                    if new_name not in subfolder_map:
                        subfolder_map[new_name] = item.path
                        break
    return subfolder_map

用户点击「加载子文件夹」按钮时,调用这个函数拿到子文件夹列表即可。

3. 调整列表组件支持多选

原有展示文件的列表组件修改为多选模式,示例如下:

# 加入到布局代码里,select_mode参数开启多选
[sg.Listbox(values=[], select_mode=sg.LISTBOX_SELECT_MODE_MULTIPLE, size=(50, 20), key='-SUBFOLDER_LIST-')]

调用完上面的子文件夹获取函数后,把字典的key列表传给Listbox的update方法刷新展示:

# 事件循环里的加载逻辑
if event == '加载子文件夹':
    subfolder_map = get_first_level_subfolders(values['-FOLDER_PATH-'])
    window['-SUBFOLDER_LIST-'].update(values=list(subfolder_map.keys()))
    # 把subfolder_map存成全局变量或者存在window的metadata里,后面取路径要用

4. 实现选中结果输出

在事件循环里添加确认按钮的逻辑,拿到选中的文件夹完整路径输出:

# 布局里加确认按钮
[sg.Button('输出选中文件夹'), sg.Button('退出')]

# 事件循环里的输出逻辑
if event == '输出选中文件夹':
    selected_names = values['-SUBFOLDER_LIST-']
    selected_paths = [subfolder_map[name] for name in selected_names]
    # 这里可以自定义输出逻辑,比如打印、弹窗展示、存文件都可以
    print("选中的文件夹路径:", selected_paths)
    sg.popup("选中的文件夹:", "\n".join(selected_paths))

内容的提问来源于stack exchange,提问作者Joey Guerrero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:45:09