JS不显示结果Python |鳗鱼

时间:2020-11-04 15:11:38

标签: javascript python arrays python-3.x eel

我无法解决问题。我写了一个程序,这是它的简短描述: 一种应用程序,其逻辑是用 python 编写的,并且使用 HTML CSS 呈现了界面。 Python导入的模块 eel 。 Python有一个返回数组的函数。在JS中,将创建一个使用函数结果的变量,然后将结果写入HTML类。看起来是这样:

  • Python代码

     import eel
     import datetime
     import sys
    
    
     eel.init("web")
    
     isoWD = datetime.datetime.today().isoweekday()
    
     @eel.expose
     def some_func():
         if isoWD == 1:
             result = ['elems', 'elems', 'elems', 'elems', 'elems', 'elems']
    
         elif isoWD == 2:
             result = ['elems', 'elems', 'elems', 'elems', 'elems', 'elems']
    
         elif isoWD == 3:
             result = ['elems', 'elems', 'elems', 'elems', 'elems', 'elems']
    
         elif isoWD == 4:
             result = ['elems', 'elems', 'elems', 'elems', 'elems', 'elems']
    
         elif isoWD == 5:
             result = ['elems', 'elems', 'elems', 'elems', 'elems', 'elems']
    
         elif isoWD == 6:
             result = ['elems', 'elems', 'elems', 'elems', 'elems', 'elems']
    
         elif isoWD == 7:
             sys.exit()
    
         return result
    
    
     eel.start("main.html", size=(325, 450))
    
  • HTML代码

function display() {
  var res = eel.some_func();
  for (var i = 0; i <= 'block__les'.length; i++) {
    document.getElementsByClassName('block__les')[i].innerHTML = res[i];
  }
}
display();
<div class="wrapper">
  <div class="block">
    <div class="block__num">
      <p>(1)</p>
    </div>
    <div class="block__les"></div>
    <div class="block__time">09.00 - 09.30</div>
  </div>
  <div class="block">
    <div class="block__num">
      <p>(2)</p>
    </div>
    <div class="block__les"></div>
    <div class="block__time">09.40 - 10.10</div>
  </div>
  <div class="block">
    <div class="block__num">
      <p>(3)</p>
    </div>
    <div class="block__les"></div>
    <div class="block__time">10.20 - 10.50</div>
  </div>
  <div class="block">
    <div class="block__num">
      <p>(4)</p>
    </div>
    <div class="block__les"></div>
    <div class="block__time">11.00 - 11.30</div>
  </div>
  <div class="block">
    <div class="block__num">
      <p>(5)</p>
    </div>
    <div class="block__les"></div>
    <div class="block__time">11.40 - 12.10</div>
  </div>
  <div class="block">
    <div class="block__num">
      <p>(6)</p>
    </div>
    <div class="block__les"></div>
    <div class="block__time">12.20 - 12.50</div>
  </div>
  <div class="block">
    <div class="block__num">
      <p>(7)</p>
    </div>
    <div class="block__les"></div>
    <div class="block__time">13.00 - 13.30</div>
  </div>
  <div class="block">
    <div class="block__num">
      <p>(8)</p>
    </div>
    <div class="block__les"></div>
    <div class="block__time">13.40 - 14.10</div>
  </div>
</div>

输出:

Output img

数组元素应在数字和时间之间输出。但是那里是空的。

1 个答案:

答案 0 :(得分:0)

为了得到暴露给eel的python函数发送的结果,javascript函数display应该变成async函数,我们应该await< /strong> 结果来自 python 函数。

因此,display 函数变为:

<script type="text/javascript">
async function display() {
  var res=await eel.some_func()();
  for (var i = 0; i <= document.getElementsByClassName('block__les').length ; i++) {
    document.getElementsByClassName('block__les')[i].innerHTML = res[i];
  }
}
display();
</script>

还有一点要提,不过和eel没有关系,在display函数中,'block__les'.length没有给出'block__les' 类,但它给出了单词 {​​{1}} 的字符数,即 10

并且为了'block__les'类的项目数,我们可以使用document.getElementsByClassName('block__les').length,它给出了8,正确的号。

当然不要忘记放

block__les

<script type="text/javascript" src="/eel.js"></script> 的头部部分

最后不要忘记改变:

main.html

变成 8 个项目以匹配 HTML 中显示的项目数。

result = ['elems', 'elems', 'elems', 'elems', 'elems', 'elems']