Python Eel:Python连接断开时通过JS自动关闭窗口的实现问题
解决Eel Python退出时自动关闭所有窗口的问题
针对你遇到的手动关闭Eel窗口繁琐、ping脚本失效的问题,核心原因是Eel的函数调用是异步的,同步try/catch无法捕获连接失败的错误,以下是可行的解决方案:
方案1:修正Ping脚本(异步错误捕获)
将原脚本的同步try/catch改为异步Promise捕获,因为Eel暴露的函数调用会返回Promise对象,错误需要通过.catch()处理:
setInterval(pingEel, 250); function pingEel() { // 调用Eel暴露的Python函数,并捕获异步错误 eel.ping_eel()().catch(() => { console.log("Eel连接中断,Python已退出,正在关闭窗口"); // 处理部分浏览器无法直接关闭非脚本打开窗口的限制 window.open('', '_self', '').close(); }); }
同时需要在Python端定义对应的ping_eel函数:
import eel @eel.expose def ping_eel(): # 仅返回标识,用于确认连接存活 return "pong" # 初始化Eel的代码...
方案2:监听Eel连接断开事件(更可靠)
如果你的Eel版本支持disconnect事件(部分新版本已内置),可以直接监听连接断开,无需轮询:
eel.on('disconnect', () => { console.log("Python进程已退出,关闭窗口"); window.open('', '_self', '').close(); });
关键注意事项
- 部分浏览器会阻止脚本关闭非由脚本打开的窗口,因此用
window.open('', '_self', '').close()替代直接window.close()来绕过限制; - 调整轮询间隔(比如从250ms改为500ms)可以减少不必要的网络请求,同时不影响响应速度。
内容的提问来源于stack exchange,提问作者BAR
相关产品推荐
相关产品推荐

