單輕量的GUI編程:PyWebview

pywebview (flowrl.com) 是圍繞 webview 組件的輕量型跨平臺包裝器(wrapper),它允許在其自己的本機 GUI 窗口中顯示 HTML 內(nèi)容。它使您可以在桌面應用程序中使用 Web 技術讲坎,同時盡最大可能隱藏使用瀏覽器構建GUI的事實腺怯。您可以將 pywebview 與輕量級的 Web 框架(例如 FlaskBottle)一起使用,也可以單獨使用 Python 和 DOM 之間的雙向橋梁眠副。

pywebview 允許您使用 HTML,CSS和 Javascript 為 Python 程序構建GUI, 將 pywebview 視為適用于 Python 的輕量級Electron霜旧。與 Electron 不同,pywebview 不捆綁 Web 渲染器儡率,而是依賴于操作系統(tǒng)提供的渲染挂据。旁注:捆綁渲染器仍然是一種選擇以清,例如 CEF。

pywebview 使用本機 GUI 創(chuàng)建 Web 組件窗口:Windows 上的 WinForms崎逃,macOS 上的 Cocoa 和 Linux 上的 QT 或 GTK掷倔。如果選擇凍結應用程序,則 pywebview 不會捆綁繁重的 GUI 工具箱或 Web 渲染器个绍,從而使可執(zhí)行文件的更小勒葱。pywebview 與 Python 3 兼容。

安裝:

pip install pywebview

Hello world:

import webview
webview.create_window('Hello world', 'https://pywebview.flowrl.com/hello')
webview.start()

顯示:

create_window函數(shù)返回一個窗口實例巴柿,該實例提供許多 window 操作和與 DOM 相關的功能凛虽。

Explore pywebview further by reading documentation, examples or contributing. If React is your thing, get started right away with React boilerplate.

您可以根據(jù)需要創(chuàng)建任意多個窗口。GUI loop 啟動后創(chuàng)建的 Windows 將會立即顯示篮洁。所有打開的窗口都作為列表存儲在 webview.windows 中涩维。窗口按創(chuàng)建順序存儲。

create_window的第二個參數(shù) url 可以指向遠程或本地路徑袁波。另外瓦阐,您可以通過設置 html 參數(shù)來加載HTML。

import webview

webview.create_window('Woah dude!', html='<h1>Woah dude!<h1>')
webview.start()

請注意篷牌,如果同時設置了 urlhtml睡蟋,則 html 優(yōu)先。

pywebview 提供了多個 Web 渲染器的選擇枷颊。要更改 Web 渲染器戳杀,請將 start 函數(shù)的 gui 參數(shù)設置為所需的值(例如 cefqt)。有關詳細信息夭苗,請參見 Renderer信卡。

HTTP server

pywebview提供了與 WSGI 兼容的 HTTP 服務器。要啟動 HTTP 服務器题造,請將url設置為本地入口點(無 protocol模式)傍菇,并將start函數(shù)的http_server參數(shù)設置為True

import webview

webview.create_window('Woah dude!', 'index.html')
webview.start(http_server=True)

如果希望將外部 WSGI 兼容的 HTTP 服務器與 pywebview 一起使用界赔,則可以將服務器對象作為 URL 傳遞丢习,即。在這種情況下淮悼,無需設置 http_server 參數(shù)咐低。

from flask import Flask
import webview

server = Flask(__name__, static_folder='./assets', template_folder='./templates')
webview.create_window('Flask example', server)
webview.start()

Threading model

webview.start 啟動 GUI 循環(huán),并且是一項阻塞功能袜腥。由于 GUI 循環(huán)受阻见擦,您必須在單獨的線程或進程中執(zhí)行后端邏輯。您可以手動啟動線程或進程。另外鲤屡,您可以通過將函數(shù)作為要啟動的第一個參數(shù) func 來執(zhí)行代碼儡湾。第二個參數(shù)設置函數(shù)的參數(shù)。這種方法在后臺啟動線程执俩,與手動啟動線程相同徐钠。

import webview

def custom_logic(window):
    window.toggle_fullscreen()
    window.evaluate_js('alert("Nice one brother")')

window = webview.create_window('Woah dude!', html='<h1>Woah dude!<h1>')
webview.start(custom_logic, window)
# anything below this line will be executed after program is finished executing
pass

Make Python and Javascript talk with each other

您可以將自定義邏輯視為與 HTML/JS 領域中的 前端代碼進行通信的后端。現(xiàn)在役首,您將如何使二者互相交流尝丐?pywebview 提供了兩種方式的 JS-Python 橋接器,使您既可以通過 Python(通過 valuate_js)執(zhí)行Javascript衡奥,也可以通過 Javascript(通過 js_apiexpose)執(zhí)行 Python 代碼爹袁。細節(jié)見:interdomain commmunication。另一種方法是在自定義邏輯中運行Python Web服務器(例如 Flask 或 Bottle)矮固,并使前端代碼對它進行API調(diào)用失息。那將與典型的Web應用程序相同。例如档址,此方法適用于將現(xiàn)有的Web應用程序移植到桌面應用程序盹兢。有關這兩種方法的更多信息,請參見 Architecture守伸。

檢索 DOM 節(jié)點

現(xiàn)在绎秒,您可以使用 window.get_elements(selector) 函數(shù)檢索DOM節(jié)點。節(jié)點使用 domJSON 庫進行序列化尼摹。Example

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末见芹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蠢涝,更是在濱河造成了極大的恐慌玄呛,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件和二,死亡現(xiàn)場離奇詭異徘铝,居然都是意外死亡,警方通過查閱死者的電腦和手機儿咱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門庭砍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來场晶,“玉大人混埠,你說我怎么就攤上這事∈幔” “怎么了钳宪?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我吏颖,道長搔体,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任半醉,我火速辦了婚禮疚俱,結果婚禮上,老公的妹妹穿的比我還像新娘缩多。我一直安慰自己呆奕,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布衬吆。 她就那樣靜靜地躺著梁钾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逊抡。 梳的紋絲不亂的頭發(fā)上姆泻,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音冒嫡,去河邊找鬼拇勃。 笑死,一個胖子當著我的面吹牛孝凌,可吹牛的內(nèi)容都是我干的潜秋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼胎许,長吁一口氣:“原來是場噩夢啊……” “哼峻呛!你這毒婦竟也來了?” 一聲冷哼從身側響起辜窑,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钩述,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后穆碎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牙勘,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年所禀,在試婚紗的時候發(fā)現(xiàn)自己被綠了方面。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡色徘,死狀恐怖恭金,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情褂策,我是刑警寧澤横腿,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布颓屑,位于F島的核電站,受9級特大地震影響耿焊,放射性物質發(fā)生泄漏揪惦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一罗侯、第九天 我趴在偏房一處隱蔽的房頂上張望器腋。 院中可真熱鬧,春花似錦钩杰、人聲如沸蒂培。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽护戳。三九已至,卻和暖如春垂睬,著一層夾襖步出監(jiān)牢的瞬間媳荒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工驹饺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钳枕,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓赏壹,卻偏偏與公主長得像鱼炒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蝌借,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容