首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python Eel - Javascript过早运行

Python Eel - Javascript过早运行
EN

Stack Overflow用户
提问于 2020-09-21 00:19:28
回答 1查看 803关注 0票数 0

我正在努力学习如何使用Python鳗鱼库。具体来说,我试图通过单击一个按钮(运行JavaScript函数)来调用Python函数。

我的文件夹里有四个文件,排列如下:

代码语言:javascript
运行
复制
|
+--- main.py
|
+--- web-gui
     |
     +--- index.html
     |
     +--- main.js
     |
     +--- style.css

这是我的main.py

代码语言:javascript
运行
复制
# Start GUI using eel

import eel

eel.init('web-gui')
eel.start('index.html', size=(1440, 900), block=False)

# Boolean data from javascript (true or false) is given to python

result = eel.js_startPython()()

print('Javascript says hello! Your result is', bool(result))

这是我的main.js

代码语言:javascript
运行
复制
// Javascript passes data to Python when button is pushed

document.getElementById("data").addEventListener("click", js_startPython);

eel.expose(js_startPython); // Expose this function to Python
function js_startPython() {
    console.log('successful button click')
    return result = true;    
}

这是我的index.html

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Python Decider</title>
    <link rel="stylesheet" href="style.css">
    
</head>
<body>

    <div class="container">
        <div class="text">
            <h1>
                The Python Decider
            </h1>
            <p>
                Have a yes/no question? Click on the button to find out your answer.
            </p>
        </div>
        <div class="button">
            <div class="flex align-midde align-center">
                <a class="button glow-button" href="#" id="data">Click me!</a>
            </div>
        </div>
    </div>
    
    <script type="text/javascript" src="/eel.js"></script>
    <script type="text/javascript" src="main.js"></script>
    
</body>
</html>

我希望,当我按下按钮时,python控制台将返回以下内容:

代码语言:javascript
运行
复制
>>> Javascript says hello! Your result is True

我当前的问题是,JavaScript代码正在运行而没有被调用。不按任何东西,它就会显示。

代码语言:javascript
运行
复制
>>> Javascript says hello! Your result is True # before button is even pressed

很抱歉我的帖子太长了。我很感激你的回答。如果这个问题已经被问到了,我也很抱歉,但是我很肯定它没有被问到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-02 10:39:33

你对鳗鱼如何与JS互动的理解是错误的。目前,您的Python代码正在eel.start()之后调用eel.start()eel.expose(js_startPython)函数将JS函数公开给Python,您想要做的是使用修饰器函数@eel.expose向您的JS公开Python函数。

Python

代码语言:javascript
运行
复制
@eel.expose
def py_startJavaScript(result):
    print('Javascript says hello! Your result is', bool(result))

JavaScript

代码语言:javascript
运行
复制
document.getElementById("data").addEventListener("click", eel.js_startPython(true));

我还注意到block=False在您的eel.start()上,这意味着鳗鱼会在这一行之后停止。您可以通过在下面添加以下内容来避免这种情况:

代码语言:javascript
运行
复制
while True:
    eel.sleep(10)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63984807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档