Функция правильно определена в Javascript с использованием пакета Eel, но не влияет на браузер - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь протестировать пример программы с использованием пакета Eel в Python, который принимает данные из браузера и затем распечатывает их на консоли Python (после нажатия кнопки), а затем функция, определенная с помощью Javascript:вызывается в Python и должен обновить тело браузера. Когда кнопка нажата, консоль python печатает правильно, но тело браузера никогда не обновляется с введенным текстом.

С пакетом 'Eel' функции могут быть определены в python и вызваны в Javascripthtml-файл, если ему предшествует @ eel.expose, а функции можно определить в javascript и вызывать через python, если ему предшествует eel.expose (nameoffunction). В этом примере программы из онлайн-учебника, когда я запускаю ее, кажется, что все работает правильно, кроме случаев, когда функция, определенная в Javascript, вызывается в Python, она вообще не обновляет браузер.

вот сайт с этимНапример, ссылка с кодом в основном не работает, но приведенный ниже код должен соответствовать примеру: https://sed -paris.gitlabpages.inria.fr / developer-meetups / 2019-01-22 / DevMeetup-Eel-20190122.pdf

Я использую PyCharm (работает на Python 3.7), но у меня схожие результаты с ноутбуком Jupyter. Строка в Python, которая содержит «eel.printGreeting (msg)», содержит предупреждение, потому что функция не может быть решена, но я думаю, что это не проблема, поскольку функция фактически определена в html-файле.

eel.py:

import time
import eel

to_whom = 'DevMeetup'

@eel.expose
def set_to_whom(new_value):
    global to_whom
    to_whom = new_value

def keep_saying_hello():
    global to_whom

    eel.init('web')
    print ("test")
    eel.start('main.html', block=False)

    print("test2")

    while True:
       current_time = time.strftime("%H:%M:%S, %d %b %Y", time.localtime())
       msg = 'Hello, {0}! ({1})'.format(to_whom, current_time)
       print(msg)
       print ("test1")
       eel.printGreeting(msg) # this is the function that doesn't appear to work properly

       print(msg)
       print("test2")
       eel.sleep(1)

if __name__ == '__main__':
    keep_saying_hello()

main.html:

<!DOCTYPE html>

<html>
  <head>
     <title>Hello DevMeetup!</title>
     <script type='text/javascript' src='/eel.js'></script>
     <script type='text/javascript'>
      function setToWhom(){
        const newToWhom = document.getElementById('input-to-whom').value
        eel.set_to_whom(newToWhom)
      }

      eel.expose(printGreeting); // this is the function called within Python
      function printGreeting(message){
        const greeting_div = document.getElementByID('greeting')
        greeting_div.innerHTML = message
      }
     </script>
 </head>

  <body>
    <div id='greeting'>---</div>
    <div>
      <input
       id='input-to-whom'
       placeholder='Type "to_whom" value here'
       value='DevMeetup'>
    <button onclick='setToWhom()'>Send</button>
    </div>
  </body>
</html>

Когда функция javascript вызывается в python, она должна затем отредактировать тело html и обновить браузер, нов браузере не происходит никаких изменений.

...