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

Python Eel开发桌面应用时列表无法从Python传递到JS问题求助

解决方案

核心问题原因

你遇到的callback=null报错90%是Eel JS调用语法错误导致的:Eel调用Python暴露的异步方法时,需要额外加一对空括号获取返回值,你现有代码漏掉了这部分。

可行修复步骤

1. 修正JS调用语法与调用时机

替换你的JS代码为以下版本:

eel.expose(OverView);
async function OverView(){
    // 新增最后一对空括号,为Eel异步获取返回值的标准写法
    // 不要用Array作为变量名,避免和JS内置Array构造函数冲突
    let accFiles = await eel.OverView_Data()()
    console.log(accFiles)
    for (var i=0; i<accFiles.length; i++) {
        var btn = document.createElement("button");
        var t = document.createTextNode(accFiles[i]);
        btn.appendChild(t);
        document.body.appendChild(btn);
    }
}
// 确保页面加载完成、Eel通信桥初始化后再调用方法
document.addEventListener('DOMContentLoaded', () => {
    OverView()
})

2. 检查HTML中的Eel引入

确认你的入口HTML文件的<body>标签末尾正确引入了Eel自动提供的js文件,无需手动下载放置:

<body>
  <!-- 你的其他页面内容 -->
  <script type="text/javascript" src="/eel.js"></script>
  <!-- 你的其他JS文件引入 -->
</body>

3. 优化Python侧代码稳定性(可选)

给Python方法加异常捕获,避免路径不存在、文件名格式异常导致返回值异常:

@eel.expose
def OverView_Data():
    try:
        folder_path = "C:\\Users\\Bex\\Records\\Accessioning"
        if not os.path.exists(folder_path):
            return []
        Acc_Files = os.listdir(folder_path)
        # 过滤掉文件名长度不足4位的文件,避免切片报错
        Acc_Files = [x[:-4] for x in Acc_Files if len(x) >=4]
        print(Acc_Files)
        return Acc_Files
    except Exception as e:
        print(f"读取目录出错: {e}")
        return []

不需要手动做JSON序列化/反序列化,Eel会自动完成Python列表和JS数组的类型转换,你注释掉的JSON相关代码无需启用

4. 检查Eel启动配置

确认你的Python启动代码中,静态文件目录和入口HTML文件名配置正确,示例如下:

import eel
import os

# 这里填你存放HTML/JS/CSS文件的文件夹名称,不要写错
eel.init('web')

# 上面的OverView_Data方法放在这里

# 启动时指定端口避免冲突,默认启动会打开开发者工具方便排查
eel.start('index.html', port=8080, mode='chrome')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:06:01