Рубрики
Без рубрики

Электронные приключения: Эпизод 95: Pywebview

Pywebview скрепок вместе Бэкэнд Python с OS-специфическим интернет-фронтом веб-двигателей. Я скажу заранее … Tagged с JavaScript, Electron, Python, Qt.

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”