最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python結合pywebview打造輕量級桌面應用的完整教學

 更新時間:2026年05月22日 14:37:20   作者:唐叔在學習  
pywebview 是一個輕量級的跨平臺Python庫,它允許你在一個原生窗口中嵌入Web技術來構建GUI界面,下面我們就來看看Python如何使用pywebview打造輕量級桌面應用吧

今天我們來聊聊一個非常輕量且強大的Python庫——pywebview。如果你曾經(jīng)為開發(fā)一個簡單的桌面應用而糾結于Electron的笨重、PyQt的復雜,或是Tkinter的界面簡陋,那pywebview或許正是你一直在找的解決方案。

一、介紹

pywebview 是一個輕量級的跨平臺Python庫,它允許你在一個原生窗口中嵌入Web技術(HTML/CSS/JS)來構建GUI界面。本質上,它就是一個迷你瀏覽器內核,讓你可以用寫網(wǎng)頁的方式寫桌面應用。

與其他桌面框架對比:

  • Electron:功能強大,但打包體積大、內存占用高。
  • PyQt/Tkinter:原生控件,但界面現(xiàn)代化程度低、開發(fā)效率不高。
  • pywebview輕量、跨平臺、易上手,適合快速開發(fā)中小型桌面應用,尤其是已有Web前端的項目。

二、安裝

安裝全量版本

pip install pywebview

安裝指定環(huán)境版本

如果你希望控制依賴版本,可以使用:

pip install pywebview[qt]  # 使用Qt后端
pip install pywebview[cef] # 使用CEF后端

三、使用入門

3.1 基本使用

來看一個最簡單的例子:

import webview

def main():
    window = webview.create_window('Hello pywebview', 'https://pywebview.flowrl.com')
    webview.start()

if __name__ == '__main__':
    main()

函數(shù)說明

  • create_window():創(chuàng)建窗口,參數(shù)包括標題和初始URL或本地HTML路徑。
  • start():啟動GUI事件循環(huán)。

3.2 應用程序架構

純網(wǎng)絡服務架構

就如上文的基本使用,前端只需暴露應用服務器,后端調用即可

import webview

if __name__ == '__main__':
    webview.create_window("My App", "http://localhost:3000")
    webview.start(http_server=True, port=3000)

無服務器架構

完全不使用網(wǎng)絡服務器,通過 webview.create_window(...html='') 或者 window.load_html 加載 HTML。

import webview

html='''
<!DOCTYPE html>
<html>
<body>
    <h1>Hello from HTML!</h1>
</body>
</html>
'''

webview.create_window("Local App", html=html)
webview.start()

根據(jù)官網(wǎng)說明:這種方法有一些限制,因為在加載的頁面上下文中沒有文件系統(tǒng)。圖片和其他資源只能通過 Base64 內聯(lián)加載。

3.3 JS與Python交互

pywebview 支持在JS中調用Python函數(shù),也支持在Python中調用JS方法。

下述是JS中調用Python函數(shù)的代碼示例:

Python端

import webview

class Api:
    def get_message(self):
        return "Hello from Python!"

if __name__ == '__main__':
    api = Api()
    window = webview.create_window('JS 接口 示例', 'index.html', js_api=api)
    webview.start()

JS端(在HTML中):

<!DOCTYPE html>
<html>
<body>
    <button onClick="greet()">打招呼</button>
</body>
<script>
function greet() {
    pywebview.api.get_message().then(function(message) {
        alert(message);
    });
}
</script>
</html>

推薦將Python邏輯封裝成API,JS中異步調用,保持前后端分離。

四、應用打包

使用 pyinstaller 打包你的應用:

pyinstaller --onefile --windowed your_script.py

打包后會生成一個獨立的可執(zhí)行文件,可在沒有Python環(huán)境的機器上運行。

五、常見使用場景

5.1 文件操作

文件下載

你可以使用Python控制文件下載路徑,或由前端觸發(fā)下載。

import webview

if __name__ == '__main__':
    # 創(chuàng)建一個標準的 webview 窗口
    webview.settings['ALLOW_DOWNLOADS'] = True
    window = webview.create_window('Simple browser', 'https://pywebview.idepy.com/download')
    webview.start()

文件拖放

下述是常見的文件拖放效果,實際上是通過拖放后獲取到文件路徑,進而通過文件路徑調用相關API再進一步操作文件。

import webview
from webview.dom import DOMEventHandler

def on_drag(e):
    pass

def on_drop(e):
    files = e['dataTransfer']['files']
    if len(files) == 0:
        return

    print(f'事件類型: {e["type"]}。被拖入的文件:')

    for file in files:
        print(file.get('pywebviewFullPath'))

def bind(window):
    window.dom.document.events.dragenter += DOMEventHandler(on_drag, True, True)
    window.dom.document.events.dragstart += DOMEventHandler(on_drag, True, True)
    window.dom.document.events.dragover += DOMEventHandler(on_drag, True, True, debounce=500)
    window.dom.document.events.drop += DOMEventHandler(on_drop, True, True)

if __name__ == '__main__':
    window = webview.create_window(
        '拖放示例', html='''
            <html>
                <body style="height: 100vh;"->
                    <h1>將文件拖放到此處</h1>
                </body>
            </html>
        '''
    )
    webview.start(bind, window)

5.2 自定義菜單

pywebview 支持自定義系統(tǒng)菜單:

import webview
import webview.menu as wm

def change_active_window_content():
    active_window = webview.active_window()
    if active_window:
        active_window.load_html('<h1>You changed this window!</h1>')

def click_me():
    active_window = webview.active_window()
    if active_window:
        active_window.load_html('<h1>You clicked me!</h1>')

def do_nothing():
    pass

def say_this_is_window_2():
    active_window = webview.active_window()
    if active_window:
        active_window.load_html('<h1>This is window 2</h2>')

def open_file_dialog():
    active_window = webview.active_window()
    active_window.create_file_dialog(webview.SAVE_DIALOG, directory='/', save_filename='test.file')

if __name__ == '__main__':
    window_1 = webview.create_window(
        'Application Menu Example', 'https://pywebview.idepy.com/hello'
    )
    window_2 = webview.create_window(
        'Another Window', html='<h1>Another window to test application menu</h1>'
    )

    menu_items = [
        wm.Menu(
            'Test Menu',
            [
                wm.MenuAction('Change Active Window Content', change_active_window_content),
                wm.MenuSeparator(),
                wm.Menu(
                    'Random',
                    [
                        wm.MenuAction('Click Me', click_me),
                        wm.MenuAction('File Dialog', open_file_dialog),
                    ],
                ),
            ],
        ),
        wm.Menu('Nothing Here', [wm.MenuAction('This will do nothing', do_nothing)]),
    ]

    webview.start(menu=menu_items)

你也可以完全用HTML+CSS在前端構建菜單,更靈活美觀。

5.3 圖標設置

使用 webview.start(icon=<file_path>) 設置窗口圖標。

import webview

if __name__ == '__main__':
    window = webview.create_window('Set window icon', 'https://pywebview.idepy.com/hello')
    webview.start(icon='../logo/logo.png')

此方法僅在 GTK 和 QT 平臺上受支持。其他平臺的圖標將在凍結過程中設置。

六、總結

pywebview 是一個非常靈活且強大的工具,尤其適合:

  • 已有Web前端,想快速封裝成桌面應用;
  • 希望用HTML/CSS/JS構建現(xiàn)代化界面;
  • 對應用體積和內存占用有要求的場景;
  • 需要跨平臺運行(Windows/macOS/Linux)。

它的學習曲線平緩,社區(qū)活躍,文檔完善,是Python開發(fā)者進軍桌面應用開發(fā)的絕佳選擇。

如果你正在尋找一個輕量、高效、易擴展的桌面開發(fā)方案,不妨試試 pywebview,相信它會給你帶來驚喜。

技術選型沒有絕對的好壞,只有適合與否。pywebview 在我多個中小項目中表現(xiàn)出色,尤其是在快速原型和內部工具開發(fā)中。希望這篇指南能幫你少走彎路,早日打造出屬于自己的桌面應用!

以上就是Python結合pywebview打造輕量級桌面應用的完整教學的詳細內容,更多關于Python pywebview桌面應用開發(fā)的資料請關注腳本之家其它相關文章!

相關文章

  • Python繪制直方圖的示例代碼

    Python繪制直方圖的示例代碼

    本文主要介紹了如何使用Python繪制直方圖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • python http接口自動化腳本詳解

    python http接口自動化腳本詳解

    這篇文章主要為大家詳細介紹了python http接口自動化腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 通過PHP與Python代碼對比的語法差異詳解

    通過PHP與Python代碼對比的語法差異詳解

    這篇文章主要介紹了通過PHP與Python代碼對比淺析語法差異,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • python讀取Excel大文件的四種方法與優(yōu)化

    python讀取Excel大文件的四種方法與優(yōu)化

    這篇文章主要為大家詳細介紹了python讀取Excel大文件的四種方法與優(yōu)化技巧,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-09-09
  • python中使用 unittest.TestCase單元測試的用例詳解

    python中使用 unittest.TestCase單元測試的用例詳解

    python 在unittest.TestCase 中提高了很多斷言方法,這篇文章主要介紹了python中使用 unittest.TestCase 進行單元測試的操作方法,需要的朋友可以參考下
    2021-08-08
  • pycharm配置Anaconda虛擬環(huán)境全過程

    pycharm配置Anaconda虛擬環(huán)境全過程

    這篇文章主要介紹了pycharm配置Anaconda虛擬環(huán)境全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Python?threading和Thread模塊及線程的實現(xiàn)

    Python?threading和Thread模塊及線程的實現(xiàn)

    這篇文章主要介紹了Python?threading和Thread模塊及線程的實現(xiàn),Python通過兩個標準庫thread和threading提供對線程的支持,threading對thread進行了封裝,具體實現(xiàn)介紹需要的朋友可以參考一下下面文章內容
    2022-06-06
  • 零基礎上手使用Python?pdfplumber提取原生PDF表格

    零基礎上手使用Python?pdfplumber提取原生PDF表格

    pdfplumber是基于PDFMiner.six構建的PDF解析庫,它不僅能提取文本,還可以將數(shù)據(jù)完整準確地提取出來,本文將從零開始,帶你系統(tǒng)掌握pdfplumber的表格提取功能并附完整可運行代碼和可視化調試技巧
    2026-04-04
  • python繪制橫向水平柱狀條形圖

    python繪制橫向水平柱狀條形圖

    這篇文章主要為大家詳細介紹了python繪制橫向水平柱狀條形圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Python如何將大TXT文件分割成4KB小文件

    Python如何將大TXT文件分割成4KB小文件

    處理大文本文件是程序員經(jīng)常遇到的挑戰(zhàn),特別是當我們需要把一個幾百MB甚至幾個GB的TXT文件分割成小塊時,下面我們來聊聊如何用Python自動完成這個任務吧
    2025-04-04

最新評論

定安县| 江阴市| 洮南市| 都兰县| 搜索| 砚山县| 桂东县| 泗水县| 镇江市| 涞源县| 琼海市| 封开县| 通江县| 阳城县| 石首市| 拉孜县| 阿克苏市| 开阳县| 大洼县| 丰都县| 潞城市| 图们市| 松江区| 湟源县| 陇川县| 屯留县| 天峻县| 拉萨市| 开江县| 荃湾区| 墨玉县| 鹤岗市| 理塘县| 什邡市| 孙吴县| 翼城县| 澄迈县| 宁波市| 搜索| 大方县| 阿勒泰市|