簡體   English   中英

Python 鰻魚 - Javascript 過早運行

[英]Python Eel - Javascript running prematurely

我正在嘗試學習使用 Python 鰻魚庫。 具體來說,我試圖通過單擊一個按鈕(運行 JavaScript 函數)來調用 Python function。

在我的文件夾中有四個文件,排列如下:

|
+--- main.py
|
+--- web-gui
     |
     +--- index.html
     |
     +--- main.js
     |
     +--- style.css

這是我的main.py

# 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 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

<!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 says hello! Your result is True

我當前的問題是 JavaScript 代碼在未被調用的情況下運行。 不按任何東西,它顯示

>>> Javascript says hello! Your result is True # before button is even pressed

很抱歉這篇文章很長。 我感謝任何答案。 如果這個問題已經在 SO 上被問到,我也很抱歉,但我很確定它還沒有被問到。

你對 Eel 如何與 JS 交互的理解是錯誤的。 目前,您的 Python 代碼在js_startPython() eel.start() eel.expose(js_startPython) function 將 JS function 公開到 Python,您要做的是使用裝飾器函數@eel.expose將 Python function 公開到您的 JS:

Python

@eel.expose
def py_startJavaScript(result):
    print('Javascript says hello! Your result is', bool(result))

JavaScript

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

我還注意到您的eel.start()上有block=False ,這意味着 eel 將在該行之后停止。 您可以通過在下面添加以下內容來避免這種情況:

while True:
    eel.sleep(10)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM