Pywebview Сшилки вместе Бэкэнд Python с ОС-специфический фронт веб-двигателей Анкет
Я заранее скажу, что это полная катастрофа. На многих машинах Windows вы буквально получите двигатель IE11, который визует ваше приложение. Даже в лучшем случае у вас даже не будет Консоль.log Доступно, и нет никакой перезагрузки, кроме как выбросить все приложение и перезагрузку. В зависимости от не только ОС, но и того, что установлено на ОС, вы столкнетесь с совершенно другим двигателем с совершенно разными ограничениями, поэтому разработка чего -либо нетривиального будет огромной болью. Но сейчас давайте проигнорируем все такие проблемы.
Также ситуация с питоном с установкой библиотек намного более беспорядочная, чем JavaScript или Ruby. Я запустил их на OSX 11.4, с PIP3 Установка pywebview . Если у вас есть проблемы с установкой и следуя, вам нужно обратиться к документации PywebView.
Привет1
Мы можем начать с самой простой возможной программы – просто создайте окно, передающее заголовок и URL
#!/usr/bin/env python3 import webview window = webview.create_window( "Hello, World!", "https://en.wikipedia.org/wiki/%22Hello,_World!%22_program" ) webview.start()
Вот результат:
Привет2
Мы также можем генерировать HTML и отправить его в окно браузера.
#!/usr/bin/env python3
import webview
html="""
Hello, World!
"""
window = webview.create_window(
"Hello, World!",
html=html
)
webview.start()
Вот результат:
Привет3
Давайте попробуем другое, загружая из файла. Вот части Python, HTML и CSS.
Прохождение Файл: URLS, кажется, не работает, но прохождение путей файла напрямую.
#!/usr/bin/env python3 import webview window = webview.create_window( "Hello, World!", "hello3.html" ) webview.start()
Документ:
Hello, World!
Стиль:
body {
margin: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background-color: #444;
color: #fff;
min-height: 100vh;
}
Вот результат, идентичный тому, что у нас было раньше:
Прилавок
Теперь, когда мы прошли через разминку, давайте напишем приложение Click Counter.
Мы можем создать API для веб -приложения и передать его как JS_API аргумент Он будет доступен на фронте через window.pywebview.api . Важно отметить, что это полностью Асинхронизация Итак, нам нужно ждет Все результаты.
#!/usr/bin/env python3
import webview
class App:
def __init__(self):
self.counter = 0
def click(self):
print("Clicked!")
self.counter += 1
def getCount(self):
return self.counter
app = App()
window = webview.create_window(
"Click Counter",
"counter.html",
js_api=App()
)
webview.start()
Документ:
Click count: 0
Стиль:
body {
margin: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background-color: #444;
color: #fff;
min-height: 100vh;
font-size: 300%;
}
button {
font-size: unset;
}
И, наконец, код Frontend, обратите внимание на все ждет S:
let button = document.querySelector("button")
let count = document.querySelector("#count")
button.addEventListener("click", async () => {
await window.pywebview.api.click()
count.innerText = await window.pywebview.api.getCount()
})
Вот результат:
Выводы
Pywebview скрепок вместе приятный бэкэнд – полностью питонный Python и катастрофический фронт, даже без Консоль.log Анкет Это то, что нужно учитывать, если у вас есть большая существующая кодовая база Python, вы хотите создать для него очень простой фронт, и вы знаете, что системы будут работать, но это крайне недостаточно для чего -либо, требующего более сложных блюд.
Это в основном технические ограничения, а не все фундаментальные, и с некоторыми усилиями Pywebview определенно может быть разработана в жизнеспособную платформу с незначительными изменениями (Drop IE11, добавление Dev Tools, добавление перезагрузки и т. Д.).
И хотя я уже пришел к выводу, что это довольно плохо, в следующем эпизоде мы все равно сделаем наше традиционное приложение терминала в PywebView.
Как обычно, Весь код для эпизода здесь Анкет
Оригинал: “https://dev.to/taw/electron-adventures-episode-95-pywebview-3a1j”