Python 鳗鱼 - Javascript 运行 过早
Python Eel - Javascript running prematurely
我正在尝试学习使用 Python 鳗鱼库。具体来说,我试图通过单击按钮(运行 JavaScript 函数)来调用 Python 函数。
在我的文件夹中有四个文件,排列如下:
|
+--- 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 控制台将 return 这个:
>>> Javascript says hello! Your result is True
我当前的问题是 JavaScript 代码是 运行 而没有调用 。不按任何东西,它显示
>>> Javascript says hello! Your result is True # before button is even pressed
抱歉太长了post。我感谢任何答案。如果这个问题已经在 SO 上被问到,我也很抱歉,但我很确定它还没有被问到。
你对Eel与JS交互的理解是错误的。目前,您的 Python 代码在 eel.start()
之后调用 js_startPython()
。 eel.expose(js_startPython)
函数将 JS 函数暴露给 Python,你要做的是将 Python 函数暴露给你的 JS,使用装饰器函数 @eel.expose
:
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)
我正在尝试学习使用 Python 鳗鱼库。具体来说,我试图通过单击按钮(运行 JavaScript 函数)来调用 Python 函数。
在我的文件夹中有四个文件,排列如下:
|
+--- 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 控制台将 return 这个:
>>> Javascript says hello! Your result is True
我当前的问题是 JavaScript 代码是 运行 而没有调用 。不按任何东西,它显示
>>> Javascript says hello! Your result is True # before button is even pressed
抱歉太长了post。我感谢任何答案。如果这个问题已经在 SO 上被问到,我也很抱歉,但我很确定它还没有被问到。
你对Eel与JS交互的理解是错误的。目前,您的 Python 代码在 eel.start()
之后调用 js_startPython()
。 eel.expose(js_startPython)
函数将 JS 函数暴露给 Python,你要做的是将 Python 函数暴露给你的 JS,使用装饰器函数 @eel.expose
:
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)