Я пытаюсь протестировать пример программы с использованием пакета 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 и обновить браузер, нов браузере не происходит никаких изменений.