首页 > 解决方案 > 数组未从 Python Eel 传递到 Javascript

问题描述

嗨,我目前正在使用 Python Eel、JS 和 HTML 开发桌面应用程序,但似乎无法将 Python 列表传递给 JS 以获取新功能。Python 端工作正常,因为它为我打印出预期的文件名列表。如果我在 JS 脚本中插入一个 let array = ['a','b','c'] ,那么我会得到 3 个标记为 so 的按钮,但是当尝试将列表从 Python 传递给 JS 时它不起作用并且我收到一个回调 = null 错误。我尝试了多种方法来解决这个问题,但似乎找不到答案!(PS:我已经尝试过注释和未注释的 json 行,但这些都不起作用)。

Python脚本:

@eel.expose
def OverView_Data():
    Acc_Files = os.listdir("C:\\Users\\Bex\\Records\\Accessioning")
    Acc_Files = [x[:-4] for x in Acc_Files]
    #Acc_Files = json.dumps(Acc_Files)
    #Acc_Files = json.loads(Acc_Files)
    print(Acc_Files)
    return (Acc_Files)

JS脚本:

eel.expose(OverView);
async function OverView(){
    let Array = await eel.OverView_Data()
    console.log(Array)
    for (var i=0; i<Array.length; i++) {
    var btn = document.createElement("button");
    var t = document.createTextNode(Array[i]);
    btn.appendChild(t);
    document.body.appendChild(btn);
    }
}

标签: javascriptcallbacknulleel

解决方案


尝试改用这一行:

let Array = await eel.OverView_Data()();

不同之处在于()现有行的末尾。您可以在Eel 文档页面上阅读更多关于为什么需要这种方法的信息(只需在页面上搜索await相关部分)。

最后,一个不相关的建议......您应该考虑避免使用名为的 JavaScript 变量,Array因为Array是 JavaScript 中的全局对象,它可能会导致一些问题。


推荐阅读