В этой статье вы прочитаете что за библиотека Eel для Python и самое главное как с ней работать думаю многим будет очень интересно и самое главное полезно.
Также если вас интересуют Python библиотеки, то вам возможно будет интересно «Быстрый старт библиотеки scikit-image для Python», уверен будет интересно.
Что за Python библиотека Eel:
Как понятно из названия статьи, это библиотека которая позволяет создавать графический интерфейс с помощью HTML, что на мой взгляд проще, чем например использовать библиотеку Tkinter, хотя возможно такой вариант не самый быстрый.
Как устанавливается Python библиотека Eel:
Тут как обычно для Python нужно использовать Pip, вот что вводим в терминал:
1 | pip install eel |
После этого вы можете работать с библиотекой.
Работа с Python библиотекой Eel:
Тут стоит сказать, что всё что дальше, это перевод части официальной документации, ссылку на документацию найдёте ниже.
Структура каталогов:
Приложение Eel будет разделено на интерфейс, состоящий из различных файлов веб-технологий (.html, .js, .css), и серверную часть, состоящую из различных скриптов Python.
Все файлы внешнего интерфейса должны быть помещены в один каталог (при необходимости их можно разделить на папки внутри него).
1 2 3 4 5 6 7 8 | my_python_script.py <-- Python scripts other_python_module.py static_web_folder/ <-- Web folder main_page.html css/ style.css img/ logo.png |
Запуск приложения:
Предположим, вы поместили все файлы внешнего интерфейса в каталог с именем web, включая вашу стартовую страницу main.html, затем приложение запускается следующим образом;
1 2 3 | import eel eel.init('web') eel.start('main.html') |
Это запустит веб-сервер с настройками по умолчанию (http://localhost:8000) и откроет браузер на http://localhost:8000/main.html.
Если установлен Chrome или Chromium, то по умолчанию он будет открываться в режиме приложения (с флагом —app cmdline), независимо от того, какой браузер ОС по умолчанию установлен (это поведение можно переопределить).
Параметры приложения:
Дополнительные параметры могут быть переданы в eel.start()
в качестве аргументов ключей словаря.
Некоторые из параметров включают режим, в котором находится приложение (например, «chrome»), порт, на котором работает приложение, имя хоста приложения и добавление дополнительных флагов командной строки.
Начиная с версии Eel v0.12.0, для start()
доступны следующие параметры:
- mode — Cтрока, указывающая, какой браузер использовать (например, «chrome», «electro», «edge», «custom»). Также может быть
None
илиFalse
, чтобы не открывать окно. По умолчанию: «хром»; - host — Строка, указывающая, какое имя хоста использовать для сервера Bottle. По умолчанию: «localhost»);
- port — Целое число, указывающий, какой порт использовать для сервера Bottle. Используйте 0 для автоматического выбора порта. По умолчанию: 8000;
- block — Буливое значение, указывающее, должен ли вызов
start()
блокировать вызывающий поток. По умолчанию:True
; - jinja_templates — Строка, указывающая папку, используемую для шаблонов Jinja2, например. «my_templates». По умолчанию:
None
; - cmdline_args — Список строк, которые необходимо передать команде для запуска браузера. Например, мы можем добавить дополнительные флаги для Chrome;
eel.start('main.html', mode='chrome-app', port=8080, cmdline_args=['--start-fullscreen', '--browser-startup-dialog'])
. По умолчанию:[]
; - size — Кортеж целых чисел, указывающий
(ширину, высоту)
главного окна в пикселях. По умолчанию:None
; - position — Кортеж целых чисел, указывающий
(слева, сверху)
главного окна в пикселях. По умолчанию:None
; - geometry — Словарь, определяющий размер и положение для всех окон. Ключи должны быть относительным путем страницы, а значения должны быть словарем вида
{'size': (200, 100), 'position': (300, 50)}
. По умолчанию:{}
; - close_callback — Лямбда или функция, которая вызывается, когда веб-сокет для окна закрывается (т. е. когда пользователь закрывает окно). Он должен принимать два аргумента; строка, представляющая собой относительный путь только что закрытой страницы и список других веб-сокетов, которые все еще открыты. По умолчанию:
None
; - app — Экземпляр Bottle, который будет использоваться, а не создавать новый. Это можно использовать для установки промежуточного программного обеспечения на экземпляр перед запуском угря, например. для управления сессиями, аутентификации и т. д.;
- shutdown_delay — Таймер, настраиваемый для механизма обнаружения выключения Eel, при котором, когда какой-либо веб-сокет закрывается, он ожидает
shutdown_delay
секунд, а затем проверяет, есть ли сейчас какие-либо соединения с веб-сокетом. Если нет, то Eel закрывается. В случае, если пользователь закрыл браузер и хочет выйти из программы. По умолчанию значениеshutdown_delay
равно 1,0 секунде;
Экспонирование функций:
В дополнение к файлам в папке внешнего интерфейса библиотека Javascript будет обслуживаться в «/eel.js». Вы должны включать это на любые страницы:
1 | <script type="text/javascript" src="/eel.js"></script> |
Включение этой библиотеки создает объект eel
, который можно использовать для связи со стороной Python.
Любые функции в коде Python, которые с @eel.expose
, как это…
1 2 3 | @eel.expose def my_python_function(a, b): print(a, b, a + b) |
… будет отображаться как методы объекта eel
на стороне Javascript, например…
1 2 | console.log("Calling Python..."); eel.my_python_function(1, 2); |
Точно так же любые функции Javascript, которые выставлены таким образом…
1 2 3 4 5 6 | eel.expose(my_javascript_function); function my_javascript_function(a, b, c, d) { if (a < b) { console.log(c * d); } } |
можно вызвать со стороны Python следующим образом…
1 2 | print('Calling Javascript...') eel.my_javascript_function(1, 2, 3, 4) |
Открытое имя также можно переопределить, передав второй аргумент. Если ваше приложение минимизирует JavaScript во время сборки, это может быть необходимо, чтобы гарантировать, что функции могут быть разрешены на стороне Python:
1 | eel.expose(someFunction, "my_javascript_function"); |
При передаче сложных объектов в качестве аргументов имейте в виду, что внутри они преобразуются в JSON и отправляются через веб-сокет (процесс, который может привести к потере информации).
Eello, World!
Объединяем это в «Hello, World!». Например, у нас есть короткая HTML-страница «web/hello.html»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <!DOCTYPE html> <html> <head> <title>Hello, World!</title> <!-- Include eel.js - note this file doesn't exist in the 'web' directory --> <script type="text/javascript" src="/eel.js"></script> <script type="text/javascript"> eel.expose(say_hello_js); // Expose this function to Python function say_hello_js(x) { console.log("Hello from " + x); } say_hello_js("Javascript World!"); eel.say_hello_py("Javascript World!"); // Call a Python function </script> </head> <body> Hello, World! </body> </html> |
и короткий скрипт на Python «hello.py»:
1 2 3 4 5 6 7 8 9 10 11 12 | import eel eel.init('web', allowed_extensions=['.js', '.html']) @eel.expose def say_hello_py(x): print('Hello from %s' % x) say_hello_py('Python World!') eel.say_hello_js('Python World!') eel.start('hello.html') |
Если мы запустим скрипт Python (python hello.py
), то откроется окно браузера с отображением hello.html, и мы увидим…
1 2 | Hello from Python World! Hello from Javascript World! |
… в терминале и…
1 2 | Hello from Javascript World! Hello from Python World! |
…в консоли браузера (чтобы открыть, нажмите F12).
Вы заметите, что в коде Python функция Javascript вызывается еще до запуска окна браузера — любые ранние вызовы, подобные этому, ставятся в очередь, а затем отправляются после установки веб-сокета.
Вывод:
В этой статье вы прочитали что за библиотека Eel для Python, для чего нужна и самое главное как с ней основы работы с ней, но если вам надо больше, то переходите по ссылке, там официальная документация.