Python eel, JS, Html
Я делаю графической интерфейс для программы на python с помощу eel. Как сделать так чтобы по нажатию на кнопку в html странице выводились данные указанные в python? Вот пример:
import eel eel.init("web") @eel.expose def get_upp(place): text = "start" return text eel.start('index.html', size=(700, 700))
Document Start
Мне нужно чтобы текст с пайтона выводился в тег по нажатию кнопки
Отслеживать
19.6k 6 6 золотых знаков 22 22 серебряных знака 56 56 бронзовых знаков
задан 6 мар 2021 в 19:58
35 3 3 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Когда при выполнении кода открывается окно браузера, нажмите CTRL + SHIFT + I , чтобы открыть консоль, где можно поймать значительную часть ошибок JS.
- https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js такой версии jQuery не существует, можно изменить, например, на 3.3.1
- ell.get_upp(place)(); Во-первых eel , во-вторых, ReferenceError: place is not defined , переменная не объявлена. Нужно заранее дать ей необходимое значение.
test.py
import eel eel.init("web") @eel.expose def get_upp(place): text = "start" return (text, place) # просто убедиться, что параметр тоже работает. eel.start('index.html', size=(700, 700))
web/index.html (кусок JS тоже можно бы вынести в отдельный файл)
Document
* Дополнительно обращаю внимание читателя, не знакомого с eel : предполагается, что рядом с файлом test.py лежит папка web , внутри неё: index.html
Eel в Python – библиотека для красивого интерфейса
В этом руководстве мы обсудим использование библиотеки Eel в языке программирования Python для разработки красивого пользовательского интерфейса для программ Python с помощью HTML, CSS и JavaScript.
Мы разделили руководство на два раздела. Первый раздел основан на фундаментальной теории библиотеки Eel в Python. В другом разделе мы покажем реализацию библиотеки , создав простое приложение, которое принимает два целых числа в качестве входных данных от пользователя и возвращает их сумму.
Что такое Eel в Python?
Eel в Python – это небольшая библиотека на языке программирования Python, которая позволяет программистам создавать простые электронные приложения с автономным графическим интерфейсом пользователя (GUI) на основе HTML и JavaScript с полным доступом к возможностям и библиотекам Python.
Eel может размещать локальный веб-сервер, а затем позволяет программистам аннотировать методы и функции в Python, чтобы мы могли вызывать их из JavaScript и наоборот. Эта библиотека разработана для того, чтобы избавить вас от неудобств при написании простых и коротких приложений с графическим интерфейсом.
Рассмотрим рисунок, изображающий концепцию Eel.

Файлы HTML, CSS и JavaScript хранятся в одном каталоге и инициализируются с помощью программы python. Файл JS обеспечивает соединение между HTML-страницей и Python с помощью функций, активируемых событиями onclick с HTML-страницы.
Реализация библиотеки
В следующем разделе рассматривается создание простого приложения с помощью библиотеки Eel в демонстрационных целях. Идея приложения заключается в том, что программа принимает два числа со страницы HTML, складывает их в Python и показывает результат пользователю.
Но прежде чем мы начнем создавать приложение, давайте установим библиотеку Eel.
Мы будем использовать установщик pip. Синтаксис установки показан ниже:
$pip install eel
Далее мы будем использовать код Visual Studio для создания этого проекта. Мы создали папку с именем «Web_test». В этой папке мы создали другую папку с именем «myWeb». В этой папке будут храниться следующие файлы:
Для страницы HML мы создадим три текстовые области и кнопку. Давайте рассмотрим следующий фрагмент кода для того же.
В приведенном выше фрагменте кода мы создали HTML-страницу, на которой мы определили три текстовые области с разными идентификаторами. ‘Int1’ и ‘int2’ предназначены для получения ввода от пользователя, а текстовая область ‘res’ предназначена для отображения результата. Кнопка с имеет прикрепленную к ней функцию onclick, определенную в файле JS.
Теперь давайте рассмотрим фрагмент кода для файла JS.
document.querySelector(«button»).onclick = function summation() < var data_1 = document.getElementById("int1").value var data_2 = document.getElementById("int2").value eel.add(data_1, data_2)(call_Back) >function call_Back(output)
В приведенном выше фрагменте кода мы определили функцию как summing(), которая активируется посредством события onclick. Внутри функции мы получили значения int1 и int2 и передали их функции sum, которая будет определена в файле Python. Функция call_Back() принимает «output» в качестве аргумента, возвращаемого методом Python с именем «sum».
Этот «вывод» возвращается в текстовой области с идентификатором «res».
Теперь давайте рассмотрим фрагмент кода для файла Python.
# importing the eel library import eel # initializing the application eel.init("myWeb") # using the eel.expose command @eel.expose # defining the function for addition of two numbers def add(data_1, data_2): int1 = int(data_1) int2 = int(data_2) output = int1 + int2 return output # starting the application eel.start("myWebpage.html")
В приведенном выше фрагменте кода мы импортировали библиотеку eel и инициализировали приложение с помощью команды eel.init («имя папки»), где мы назначили «myweb» в качестве имени папки.
Затем мы использовали команду eel.expose, в которой мы определили функцию «add», которая добавит «data_1» к «data_2» и вернет результирующее значение как «output». Значение, хранящееся в «output», выбирается функцией «call_Back» в файле JS и помещается на веб-страницу HTML.
Затем мы инициализировали приложение с помощью команды eel.start (“html filename”), указав имя файла как “myWebpage.html”.
Теперь давайте сохраним файл python и выполним его, используя следующий синтаксис, чтобы увидеть результат.
$ python my_sum.py
На следующем рисунке показан разработанный пользовательский интерфейс.

По умолчанию библиотека Python Eel использует веб-браузер Google Chrome для запуска приложения; однако мы также можем упомянуть браузер с помощью опции «режим». Наряду с «режимом» есть несколько других доступных вариантов приложения, таких как «положение», «размер», «геометрия» и многие другие, которые передаются внутри команды eel.start().
Заключение
В приведенном выше руководстве мы обсудили библиотеку Eel и ее использование в Python. Мы узнали, что эта библиотека помогает программистам создавать автономные приложения на основе HTML и JavaScript.
С помощью библиотеки Eel мы получаем возможности Python, включая свободу разработки пользовательского интерфейса с помощью HTML, а также CSS. Хотя по популярности Eel уступает своему главному конкуренту Electron; однако есть много программистов, чей первый выбор – Eel для создания простых приложений с графическим интерфейсом пользователя(GUI).
Гайд Web-интерфейс для Python
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.
Mamashin
Известный
Автор темы
Хаю-хай с вами ивангай, порылся на bh и вроде бы не нашёл данного гайда/информации, поэтому решил написать свой крутой красивый прикальдесный гайд как приклеить веб-интерфейс к мозгам на питоне, если такая тема уже есть, не надо пожалуйста проявлять агрессию в мою сторону пж, заранее спасибо.
В этом гайде я разжую вам как можно соединить языки разметки гипертекста(html,css) и язык программирования/бэкэнда «Python» на простых словах — html/css — тело, python — мозги. Так же хочу сразу сказать, в этом гайде я не буду писать какую либо программу, а вот в следующем гайде мы будем писать красивое крутое приложение с показом погоды, или какой нибудь плеер, это лишь вводный гайд по теме веб-интерфейса и python, тк такую вещь как DevelNext не каждый может понять.
Что нам нужно:
1. Python, скачать(клик) можно с официального сайта, качаем последнею версию для вашей винды или другой ос, думаю про разрядность системы не стоит упоминать.
2. Библиотека EEL, pip install eel — на простых словах — крутая вещь для связи веб интерфейса и python.
3. Библиотека PyInstaller, pip install pyinstaller — на простых словах — чтобы скинуть вашу приколюху вашему другу без заморочки с установкой питона.
4. Иметь представление, хотя бы чуть чуть об гипертекстовых языках — css/html — на простых словах, html — абсолютно все, что вы видите в интернете, css — одежда для сайта(цвета,формы, размеры и тд.)
5. Уметь пользоваться компьютером и не путаться среди 2х папок в папке.
Итак начнём. После установки питона, открываем командную строку на Windows это сочетание Win+R, по русски — кнопка с квадратами + англ. R или рус. К.
Готово, командная строка у нас открыта, я же буду использовать эмулятор командной строки, потому что — потому. Он ничем не отличается от обычной кроме наличия некоторых удобств и функций.
Перед вами примерно такая картина:
Заходим на любой нужный диск и создаём там папку где и будет хранится наше приложение, я же буду использовать диск «C».
Затем прописываем в командной строке «cd c:/python/program» ПО РУССКИ — cd (ваш диск):/ваша папка/файл или еще 1 папка где будет сама программа.
В моём же случаи, программа будет храниться на диске C в папке python и в папке program. Думаю понятно объяснил.
Если видим такую ситуацию как ниже, то я вас поздравляю, вы в директории вашей будущей программы.
Как надо:
Теперь создаём в этой папке 1 текстовый файл и 1 папку.
У текстового файла расширение .txt меняем на .py, если у вас не видно расширения и у вас Windows 10, то в этой же папке, чуть выше нажмите «Вид» ставим галочку «Расширения имен файлов»
Включаем возможность изменять расширения файлов:
Теперь, когда у нас есть .py файл(у меня это who.py) нам нужно создать папку, желательно с каким то нужным названием например: web, interface или что то такое, я же назову «why» так как я показываю вам пример. В папке которая рядом со скриптом создаём файл — название.html, у меня же это who.html, так же сразу там можно создать папку css.
Основная папка:
По русски — здесь у нас так сказать логика/мозги — .py, а в папке тельце для наших мозгов, так сказать сайт с бэкэндом на Python, только это будет приложение.
Папка с интерфейсом:
В файле .html у нас будет основные элементы приложения, а с помощью css мы сделаем его ультра красивым!
Python, играет роль не только как открывашка html,css,js в формате приложения, но и как эффективный язык программирования, паралельно с интерфейсом, например тот же тэг
в html мы можем просто заменить оператором «print» в питоне, но это нам не надо, я вижу питон как решение сложных и даже не возможных задач для html.
Сразу решим вопрос с python, открываем наш .py файлик любым текстовым редактором но не блокнотом, я же использую sublime text 2, затем пишем там следующее:
print("[PYTHON]: Я запустился!") # Это не обязательная строчка, её я написал для себя. import eel # Импортируем нашу библиотеку eel.init('why') # Подключаем папку с интерфейсом eel.start('who.html', size=(500, 500)) # ell.start - подключаем основной файлик, size=(500, 500) - размеры приложения при открытии.
Теперь, при запуске нашей программы у нас будет открываться наше приложение.
Запустить программу через консоль: переходим в директорию с нашей программой, и пишем «python название.py», если у вас есть ошибки в коде — командная строка сообщит об этом и программа не запуститься.
Итак, приложение у нас есть, но что в него запихать? Да всё что угодно, можно запихать туда то же navbar меню, написать его в стиле сайта но это не совсем логично и глупо, можно приклеить тот же калькулятор, считать будет python, а за оформление приложения будут отвечать css и html.
Давайте напишем стандартную структуру html страницы и 1 фразу в нашем приложении.
Основной html:
BlastHack - Гайд Привет, мир!
Давайте запустим наше приложение! Пока мы еще его не скомпилировали в exe, откроем через консоль! Заходим в директорию с нашим творением и пишем — python название.py я же пишу — python who.py.
Если после принта, у вас нету ошибок значит всё прекрасно и приложение успешно запустилось!
Теперь смотрим на само приложение!
Если у вас всё так же, то я готов вас поздравить у вас всё получилось, а те кто знают хотя бы чуть чуть html,css,js уже поняли что можно сделать)
Я же покажу вам лишь несколько интересных вещей только на html, в следующем гайде как я уже сказал будем писать мозги на python, возможно даже и игру.
Итак, наложим красивый гридиентовый фон для нашего приложения!
Открываем папку css и создаём там любой файл с расширением .css, затем вставляем в него:
body < background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab); background-size: 400% 400%; animation: gradient 10s ease infinite; >@keyframes gradient < 0% < background-position: 0% 50%; >50% < background-position: 100% 50%; >100% < background-position: 0% 50%; >>
Теперь посмотрим на наше приложение! Заранее подключив этот стиль в html документе!
Фон раздвоился поскольку у нас всего лишь 1 элемент! Нечего страшного, сейчас мы свами подключим библиотеку bootstrap и добавим меню в наше приложение.
Основной html:
Теперь давайте взглянём на наше приложение!
Так оно будет выглядит в полном окне:
А вот так в стандартных размерах или на телефоне с ОС Android:
Опять же полоски, смотрится не очень красиво я согласен, но опять же у нас нечего нету) Давайте добавим тег и добавим 3 песни в наше приложение, чтобы хоть чем то занять это место, кстати ниже можно сделать информативную штуку как на многих сайтах, честно не знаю как это называется :D.
Создадим в папке с нашим веб-интерфейсом папку «source» и кинем туда 3 трека(просто ради примера), я буду использовать свои любимые.
Основной html:
И вот, что у нас получилось:
Вот так выглядит наше простое и красивое приложение на весь экран:
Теперь в стандартных размерах:
Конечно вы можете использовать точно так же как и для сайтов javascript, я хотел лишь показать вам все это в деле) Теперь я пожалуй добавлю 1 картинку и информационную панель! И пожалуй на этом закончу данный гайд. Для начала код:
Основной html:
BlastHack - Гайд
Крутые песни:The Girl Next Door feat. WMD - ON TOP
Gorillaz - Feel Good Inc.
Найтивыход - ты никому не нужен
Приложение создано в ознакомительных целях для:BlastHack.
Без цели оскорбить кого либо, автор гайда -MiR0nov.
Так же создал еще 1 стиль для нижнего подвала приложения!
.info < background: black; border: 0px solid black; position: fixed; left: 0; right: 0; bottom: 0; >img
Теперь посмотрим на наше готовое, красивое, фактически на python приложение!
Полный размер:
Размер при запуске:
Вот такой вот получился у меня гайд! Спасибо всем за внимание, я потратил 3 часа на создание этого гайда, после других порталов и долгого отсутствия на bh мне очень тяжело привыкнуть ко всему. Так оставлю архив со всем этим делом, у вас вообще нечего не получится даже по всем моим комментариям в коде и разжовкой в тексте.
Ну, а теперь как же все таки скинуть это своему другу?
Ответ очень прост:
1. Вспоминаем про библиотеку PyInstaller, про которую я говорил в самом начале.
2. Переходим в директорию со скриптом(через кмд).
3. Прописываем следующие: pyinstaller -F название.py, в моём случаи: pyinstaller -F who.py.
И ожидаем от 20 секунд до полторы минуты, зависит от размера всей вашей программы, как вы помните мы подключали html,css, а там еще пару треков и поэтому вес программы вышел аж на 11мб. После компиляции у вас появятся несколько папок по верх вашего файла и папки с интерфейсом, вам нужна папка «dist», открываете вашу папку с интерфейсом копируете от туда все файлы и папки и вставляйте в папку dist уже к exe файлу — готово! Данную папку с программой можно кидать любому вашему другу и ему не обязательно даже устанавливать питон.
Готовый exe-python:
Всем еще раз большое спасибо за прочтение данного гайда, я рад если он вам чем нибудь помог, ждите следующих тем!
Материал из гайда(на бх не помещается!): YandexDisk(click)
Eel 0.16.0
Eel is a little Python library for making simple Electron-like offline HTML/JS GUI apps, with full access to Python capabilities and libraries.
Eel hosts a local webserver, then lets you annotate functions in Python so that they can be called from Javascript, and vice versa.
Eel is designed to take the hassle out of writing short and simple GUI applications. If you are familiar with Python and web development, probably just jump to this example which picks random file names out of the given folder (something that is impossible from a browser).
- Eel
- Intro
- Install
- Usage
- Directory Structure
- Starting the app
- App options
- Chrome/Chromium flags
- Callbacks
- Synchronous returns
Intro
There are several options for making GUI apps in Python, but if you want to use HTML/JS (in order to use jQueryUI or Bootstrap, for example) then you generally have to write a lot of boilerplate code to communicate from the Client (Javascript) side to the Server (Python) side.
The closest Python equivalent to Electron (to my knowledge) is cefpython. It is a bit heavy weight for what I wanted.
Eel is not as fully-fledged as Electron or cefpython — it is probably not suitable for making full blown applications like Atom — but it is very suitable for making the GUI equivalent of little utility scripts that you use internally in your team.
For some reason many of the best-in-class number crunching and maths libraries are in Python (Tensorflow, Numpy, Scipy etc) but many of the best visualization libraries are in Javascript (D3, THREE.js etc). Hopefully Eel makes it easy to combine these into simple utility apps for assisting your development.
Join Eel’s users and maintainers on Discord, if you like.
Install
Install from pypi with pip :
pip install eel
To include support for HTML templating, currently using Jinja2:
pip install eel
An Eel application will be split into a frontend consisting of various web-technology files (.html, .js, .css) and a backend consisting of various Python scripts.
All the frontend files should be put in a single directory (they can be further divided into folders inside this if necessary).
my_python_script.pyStarting the app
Suppose you put all the frontend files in a directory called web , including your start page main.html , then the app is started like this;
This will start a webserver on the default settings (http://localhost:8000) and open a browser to http://localhost:8000/main.html.
If Chrome or Chromium is installed then by default it will open in that in App Mode (with the --app cmdline flag), regardless of what the OS's default browser is set to (it is possible to override this behaviour).
App options
Additional options can be passed to eel.start() as keyword arguments.
Some of the options include the mode the app is in (e.g. 'chrome'), the port the app runs on, the host name of the app, and adding additional command line flags.
As of Eel v0.12.0, the following options are available to start() :
- mode, a string specifying what browser to use (e.g. 'chrome' , 'electron' , 'edge' , 'custom' ). Can also be None or False to not open a window. Default: 'chrome'
- host, a string specifying what hostname to use for the Bottle server. Default: 'localhost' )
- port, an int specifying what port to use for the Bottle server. Use 0 for port to be picked automatically. Default: 8000 .
- block, a bool saying whether or not the call to start() should block the calling thread. Default: True
- jinja_templates, a string specifying a folder to use for Jinja2 templates, e.g. my_templates . Default: None
- cmdline_args, a list of strings to pass to the command to start the browser. For example, we might add extra flags for Chrome; eel.start('main.html', mode='chrome-app', port=8080, cmdline_args=['--start-fullscreen', '--browser-startup-dialog']) . Default: []
- size, a tuple of ints specifying the (width, height) of the main window in pixels Default: None
- position, a tuple of ints specifying the (left, top) of the main window in pixels Default: None
- geometry, a dictionary specifying the size and position for all windows. The keys should be the relative path of the page, and the values should be a dictionary of the form . Default: <>
- close_callback, a lambda or function that is called when a websocket to a window closes (i.e. when the user closes the window). It should take two arguments; a string which is the relative path of the page that just closed, and a list of other websockets that are still open. Default: None
- app, an instance of Bottle which will be used rather than creating a fresh one. This can be used to install middleware on the instance before starting eel, e.g. for session management, authentication, etc. If your app is not a Bottle instance, you will need to call eel.register_eel_routes(app) on your custom app instance.
- shutdown_delay, timer configurable for Eel's shutdown detection mechanism, whereby when any websocket closes, it waits shutdown_delay seconds, and then checks if there are now any websocket connections. If not, then Eel closes. In case the user has closed the browser and wants to exit the program. By default, the value of shutdown_delay is 1.0 second
Exposing functions
In addition to the files in the frontend folder, a Javascript library will be served at /eel.js . You should include this in any pages:
Including this library creates an eel object which can be used to communicate with the Python side.
Any functions in the Python code which are decorated with @eel.expose like this.
. will appear as methods on the eel object on the Javascript side, like this.
Similarly, any Javascript functions which are exposed like this.
can be called from the Python side like this.
The exposed name can also be overridden by passing in a second argument. If your app minifies JavaScript during builds, this may be necessary to ensure that functions can be resolved on the Python side:
When passing complex objects as arguments, bear in mind that internally they are converted to JSON and sent down a websocket (a process that potentially loses information).
Eello, World!
Putting this together into a Hello, World! example, we have a short HTML page, web/hello.html :
and a short Python script hello.py :If we run the Python script ( python hello.py ), then a browser window will open displaying hello.html , and we will see.
Hello from Python World! Hello from Javascript World!. in the terminal, and.
Hello from Javascript World! Hello from Python World!. in the browser console (press F12 to open).
You will notice that in the Python code, the Javascript function is called before the browser window is even started - any early calls like this are queued up and then sent once the websocket has been established.
Return values
While we want to think of our code as comprising a single application, the Python interpreter and the browser window run in separate processes. This can make communicating back and forth between them a bit of a mess, especially if we always had to explicitly send values from one side to the other.
Eel supports two ways of retrieving return values from the other side of the app, which helps keep the code concise.
To prevent hanging forever on the Python side, a timeout has been put in place for trying to retrieve values from the JavaScript side, which defaults to 10000 milliseconds (10 seconds). This can be changed with the _js_result_timeout parameter to eel.init . There is no corresponding timeout on the JavaScript side.
Callbacks
When you call an exposed function, you can immediately pass a callback function afterwards. This callback will automatically be called asynchronously with the return value when the function has finished executing on the other side.
For example, if we have the following function defined and exposed in Javascript:
Then in Python we can retrieve random values from the Javascript side like so:
(It works exactly the same the other way around).Synchronous returns
In most situations, the calls to the other side are to quickly retrieve some piece of data, such as the state of a widget or contents of an input field. In these cases it is more convenient to just synchronously wait a few milliseconds then continue with your code, rather than breaking the whole thing up into callbacks.
To synchronously retrieve the return value, simply pass nothing to the second set of brackets. So in Python we would write:
You can only perform synchronous returns after the browser window has started (after calling eel.start() ), otherwise obviously the call will hang.In Javascript, the language doesn't allow us to block while we wait for a callback, except by using await from inside an async function. So the equivalent code from the Javascript side would be:
Eel is built on Bottle and Gevent, which provide an asynchronous event loop similar to Javascript. A lot of Python's standard library implicitly assumes there is a single execution thread - to deal with this, Gevent can "monkey patch" many of the standard modules such as time . This monkey patching is done automatically when you call import eel . If you need monkey patching you should import gevent.monkey and call gevent.monkey.patch_all() before you import eel . Monkey patching can interfere with things like debuggers so should be avoided unless necessary.
For most cases you should be fine by avoiding using time.sleep() and instead using the versions provided by gevent . For convenience, the two most commonly needed gevent methods, sleep() and spawn() are provided directly from Eel (to save importing time and/or gevent as well).
In this example.
. we would then have three "threads" (greenlets) running;
- Eel's internal thread for serving the web folder
- The my_other_thread method, repeatedly printing "I'm a thread"
- The main Python thread, which would be stuck in the final while loop, repeatedly printing "I'm a main loop"
Building distributable binary with PyInstaller
If you want to package your app into a program that can be run on a computer without a Python interpreter installed, you should use PyInstaller.
- Configure a virtualenv with desired Python version and minimum necessary Python packages
- Install PyInstaller pip install PyInstaller
- In your app's folder, run python -m eel [your_main_script] [your_web_folder] (for example, you might run python -m eel hello.py web )
- This will create a new folder dist/
- Valid PyInstaller flags can be passed through, such as excluding modules with the flag: --exclude module_name . For example, you might run python -m eel file_access.py web --exclude win32com --exclude numpy --exclude cryptography
- When happy that your app is working correctly, add --onefile --noconsole flags to build a single executable file
Microsoft Edge
For Windows 10 users, Microsoft Edge ( eel.start(. mode='edge') ) is installed by default and a useful fallback if a preferred browser is not installed. See the examples:
- A Hello World example using Microsoft Edge: examples/01 - hello_world-Edge/
- Example implementing browser-fallbacks: examples/07 - CreateReactApp/eel_CRA.py