仅当条件为 True 时才在 python 中使用 Eel 调用 JavaScript 函数
Posted
技术标签:
【中文标题】仅当条件为 True 时才在 python 中使用 Eel 调用 JavaScript 函数【英文标题】:Using Eel calling JavaScript function in python only when a condition is True 【发布时间】:2021-10-27 04:48:44 【问题描述】:描述问题 我正在尝试调用 javascript 函数,但仅当 if 条件在 Python 中计算为 True 时。我正在使用 Pygame 和 Eel 开发一个音乐播放器项目,我想调用 JS 函数来自动更改歌曲封面图像,而无需在上一首歌曲结束时单击按钮,这是使用 pygame.mixer.music.get_busy() 找到的在 python 中,当我想调用 'eel.fine()' 但我确定它为什么不起作用或如何像 Eel 新手一样完成这项工作
预期当条件变为真时,函数 find 应该从 python 代码中调用,即只想在一首歌结束时更改封面图片 代码 sn-p(s) 这是一些可以轻松用于重现问题或了解我需要帮助的代码。注意:我删除了大部分代码只是为了便于理解,只添加了与代码流相关的部分,我需要帮助。
import eel
from pygame import mixer
eel.init('web')
js='function $fine()document.getElementById("spl").live("click");'
def my_update():
if pausev and not fine:
if not start and not mixer.music.get_busy():
#ok=js2py.eval_js(js)
# ok()
print("booom")
eel.fine() # This is the part I need help with
play()
print('new song up')
else:
print('old playing still')
else:
print('strictly paused')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="description" content="">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Aishu's Magic-Music</title>
<link href="style.css" rel="stylesheet">
<script type="text/javascript" src="/eel.js"></script>
<script type="text/javascript" src="main.js"></script>
<script type="text/javascript">
eel.expose(fine);
function fine()
document.getElementById("spl").live("click");
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js" type="text/javascript"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
</head>
<body>
<section class="wellcome_area clearfix" id="home">
<div class="container h-100">
<div class="row h-100 align-items-center">
<div class="col-12 col-md">
<div class="get-start-area">
<form class="form-inline">
<input type="button" id="repeat" class="submit" value="▶ Shower" onclick="generateQRCode(7)">
<input type="button" id="spl" class="submit" value="▶ Play" onclick="generateQRCode(2)">
<input type="button" class="submit" value=">> Skip" onclick="generateQRCode(3)">
</form>
</div>
</div>
</div>
</div>
<div class="welcome-thumb ">
<img id="qr" class="headshot headshot-1" src="img/bg-img/play.jpg" >
</div>
</section>
</body>
</html>
// main.js
var whatever=1;
var loop_check=1;
function generateQRCode(data)
if(data==2)
change()
if(whatever==1)
eel.generate_qr(1)(setImage);
whatever=0;
else
eel.generate_qr(data)(setImage)
else if(data==7)
change_loop()
eel.generate_qr(data)(setImage)
else
eel.generate_qr(data)(setImage)
function change()
var elem = document.getElementById("spl");
if (elem.value=="|| Pause") elem.value = "▶ Play";
else elem.value = "|| Pause";
function setImage(base64)
document.getElementById("qr").src = base64
更新 它部分工作并且不能按预期工作 是我正常运行时遇到的错误
而当我打开检查时的输出 - 控制台
桌面:
操作系统:Windows 浏览器铬 版本 94【问题讨论】:
【参考方案1】:经过大量尝试和错误后,我已经解决了这个问题,因为我是 JavaScript、Eel 和 Python 连接的新手,我后来才意识到,在我的代码中,我尝试过使用
document.getElementById("spl").live("click");
和
document.getElementById("spl").trigger("click");
当我使用时
document.getElementById("spl").click();
之前错过了暴露JavaScript函数, 因此,当我在暴露后再次尝试使用 .click() 时,我意识到这是我一直以来一直想念的。尽管在没有 Eel 的 JavaScript 中,here 和 here 的工作方式或多或少是相同的,但由于某种原因,当与 Eel 一起使用时会产生这种奇怪的暂停现象,仅在调试器中导致,如果不是,则会产生 websocket 错误。
很高兴我终于找到了一种切实可行的方法。
【讨论】:
以上是关于仅当条件为 True 时才在 python 中使用 Eel 调用 JavaScript 函数的主要内容,如果未能解决你的问题,请参考以下文章