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

Python Eel与JS交互问题:recv_data函数无法生成文件求助

问题排查与修复方案

你的代码存在三个关键问题导致功能失效,以下是具体问题和修复后的代码:

1. Python端文件写入错误

file.write()方法仅接受单个字符串参数,你传入三个参数会直接触发错误。另外,推荐使用with语句管理文件对象,无需手动调用close(),避免资源泄漏。

2. JavaScript变量名不匹配

你定义了变量klass存储年级输入值,但调用eel.recv_data时传入了未定义的grade,导致参数传递失败。

3. 表单默认提交行为未阻止

点击提交按钮会触发表单默认的页面刷新行为,中断Eel的异步调用,需要在事件处理函数中阻止该行为。


修复后的Python代码

import eel

eel.init("web")

@eel.expose
def recv_data(surname, name, grade):
    # 使用with语句自动管理文件,拼接字符串后写入
    with open("results.txt", "a+", encoding="utf-8") as f:
        f.write(f"{surname}, {name}, {grade}\n")

eel.start("index.html", mode="edge", size=(500,500))

修复后的HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="box">
        <form action="#">
            <input type="text" id="surname" placeholder="Surname">
            <input type="text" id="name" placeholder="Name">
            <input type="text" id="grade" placeholder="Grade">
            <input type="submit" id="btn" value="Register">
        </form>
    </div>
    <script>
        let btn = document.querySelector("#btn");
        btn.addEventListener("click", sendData);
        
        async function sendData(event) {
            // 阻止表单默认提交刷新行为
            event.preventDefault();
            
            let surname = document.querySelector("#surname").value;
            let name = document.querySelector("#name").value;
            // 统一变量名为grade,避免不匹配
            let grade = document.querySelector("#grade").value;
            
            await eel.recv_data(surname, name, grade);
        }
    </script>
</body>
</html>

CSS代码无需修改

你的CSS样式没有问题,可以直接保留原代码。


修复后,点击Register按钮即可将输入内容追加写入results.txt文件,文件会生成在Python脚本的同级目录下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:45:33