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

基于Eel开发Python本地应用:如何调用系统默认目录选择对话框?

解决方案:在Eel中调用系统原生目录选择对话框或轻量替代工具

一、在Eel中集成轻量原生对话框库

1. 使用nativefiledialog库

这个库跨Windows、Ubuntu平台,直接调用系统原生对话框,外观与系统完全一致,体积轻量无冗余依赖。

安装命令:

pip install nativefiledialog

Python端代码(暴露给JS调用):

import eel
import nativefiledialog as nfd

@eel.expose
def select_directory():
    # 唤起目录选择对话框
    status, path = nfd.pick_folder(title="选择目标目录")
    return path if status != nfd.ERROR else None

eel.init('web')
eel.start('index.html', size=(800, 600))

JS端调用(在HTML页面中):

async function openDirPicker() {
    const selectedPath = await eel.select_directory()();
    if (selectedPath) {
        // 处理选中的目录路径
        console.log("选中目录:", selectedPath);
    }
}

2. 使用tinyfiledialogs库

同样是轻量跨平台库,调用系统原生对话框,用法更简洁:

安装命令:

pip install tinyfiledialogs

Python端代码:

import eel
import tinyfiledialogs as tfd

@eel.expose
def select_directory():
    return tfd.tinyfd_selectFolderDialog("选择目录", "")

eel.init('web')
eel.start('index.html', size=(800, 600))

3. 无额外依赖:调用系统原生命令

如果不想安装第三方库,可以通过subprocess调用系统自带工具唤起对话框:

Python端跨平台实现:

import eel
import subprocess
import os

@eel.expose
def select_directory():
    if os.name == 'nt':
        # Windows平台调用PowerShell
        cmd = '''powershell -Command "$folder = (New-Object -ComObject Shell.Application).BrowseForFolder(0, '选择目录', 0, 0).Self.Path; Write-Output $folder"'''
        result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    elif os.name == 'posix':
        # Ubuntu平台调用zenity(多数桌面环境预装,未安装可执行`sudo apt install zenity`)
        cmd = '''zenity --file-selection --directory --title="选择目录"'''
        result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    else:
        return None
    
    return result.stdout.strip() if result.returncode == 0 and result.stdout.strip() else None

eel.init('web')
eel.start('index.html', size=(800, 600))

二、轻量Eel替代工具:NiceGUI

如果需要更便捷的原生对话框支持且追求现代UI开发体验,NiceGUI是不错的选择——它基于FastAPI和Vue,远轻于pywebview,自带系统原生对话框,且内置大量现代风格UI组件。

示例代码:

from nicegui import ui

def handle_dir_select():
    selected_path = ui.dialog(ui.selection_directory(label='选择目录')).open()
    if selected_path:
        ui.notify(f"已选中目录:{selected_path}")

ui.button('打开目录选择框', on_click=handle_dir_select)

ui.run()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:20:27