仅当条件为 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 函数的主要内容,如果未能解决你的问题,请参考以下文章

MongoDb 仅当数组不为空时才在数组中添加字段

仅当所有文本字段都已填写时才在 Swift 中启用按钮

仅当它不存在时才在 SQLite 中创建表

仅当 git 标签不以字符串“Release”或“Test”开头时才在 Gitlab CI 中启动管道

仅当最小值小于另一表中的值时才在一个表中加入值 - 雪花

仅当对象属性为 true 时才绑定 DataGridColumn