溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python不用Gui怎么實(shí)現(xiàn)圖形界面

發(fā)布時間:2023-04-13 09:53:55 來源:億速云 閱讀:125 作者:iii 欄目:編程語言

這篇文章主要介紹了Python不用Gui怎么實(shí)現(xiàn)圖形界面的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Python不用Gui怎么實(shí)現(xiàn)圖形界面文章都會有所收獲,下面我們一起來看看吧。

神器出場

Web 程序是用 Flask 開發(fā)的,所以需要安裝 Python 的 Pywebview 作為打包工具。

建立虛擬環(huán)境[3] 或者在原來的 Web 項目環(huán)境中,執(zhí)行:

pip install pywebview

在 Windows 系統(tǒng)中,需要 .Net 4.0 以上

小試牛刀:

import webview

window = webview.create_window('Hello!', 'http://http://www.justdopython.com')
webview.start()
  • 引用 webview 庫

  • 啟動一個窗口,設(shè)置標(biāo)題為 Hello!,指定頁面地址

  • 啟動 webview

就能看到如下的效果:

Python不用Gui怎么實(shí)現(xiàn)圖形界面

小試牛刀

神奇吧!

Pywebview 支持三種模式,簡單模式,服務(wù)器模式 和 線程模式。

簡單模式 就相當(dāng)于一個定制流瀏覽器,指定一個地址,就可以實(shí)現(xiàn)瀏覽了,如上面的例子。

服務(wù)器模式 相當(dāng)于包裝了一個 Web 應(yīng)用,就是會啟動一個本地服務(wù)器,在定制的瀏覽器中瀏覽。

線程模式 比較高級,就是需要自己手動維護(hù)線程狀態(tài),實(shí)現(xiàn)更高級的玩法。

對于現(xiàn)在的需求,我們選擇服務(wù)器模式,即包裝本地的一個 Web 應(yīng)用。

對接 Flask

服務(wù)器模式會為我們提供一個 HTTP Server,只要把 Web 應(yīng)用部署上去就好了。

因?yàn)闊o非展示實(shí)際項目的代碼,這里寫一個簡單的 Flask 應(yīng)用:

關(guān)于 Flask Web 應(yīng)用開發(fā),可以參考筆者之前寫的 Flask 文章

創(chuàng)建一個 app.py 文件:

from flask import Flask, render_template, jsonify, request

app = Flask(__name__) # 創(chuàng)建一個應(yīng)用

@app.route('/') 
def index():# 定義根目錄處理器
return render_template('index.html')

@app.route('/detail')
def detail():
return render_template('detail.html') 

if __name__ == '__main__':
app.run() # 啟動服務(wù)

這個應(yīng)用很簡單,只有兩個頁面,分別通過 / 和 /detail 來訪問。

如果運(yùn)營這段代碼,就會啟動一個 Flask 應(yīng)用,通過 http://120.0.0.1:5000 來訪問。

如何套在 Pywebview 中呢?

很簡單:

import webview
from app import app

if __name__ == '__main__':
window = webview.create_window('Pywebview', app, height=600, width=1000)
webview.start()
  • 引入 webview

  • 引入 剛才創(chuàng)建的 app

  • 創(chuàng)建一個 webview window,并將 app 作為 url 參數(shù)傳入

  • 然后啟動 webview 就可以了

這里的關(guān)鍵是,將 Flask 應(yīng)用作為 url 參數(shù),Webview 發(fā)現(xiàn)傳入的參數(shù)是 flask 應(yīng)用,就會啟動服務(wù)模式。

運(yùn)行程序后,可以看到和在瀏覽器中的效果一樣的:

Python不用Gui怎么實(shí)現(xiàn)圖形界面

對接 Flask

目錄問題

現(xiàn)在就可以將這個項目打包成 exe 了。

首先需要安裝 pyinstaller[4]

pip install pyinstaller

然后進(jìn)入程序目錄執(zhí)行:

pyinstall -F -w main.py
  • F 參數(shù)表示將程序打包成一個可執(zhí)行文件,不加這個參數(shù)就會打包成一個文件夾夾

  • w 參數(shù)表示執(zhí)行打包好的可執(zhí)行程序時,不顯示命令行窗口,這個特性只有在 Windows 系統(tǒng)中有

很快在程序目錄下,就會生成一個 dist 文件夾,其中就會有個 main.exe 可執(zhí)行文件,這就是打包好的結(jié)果。

雙擊運(yùn)行,可以看到效果……

等等,好像并不是想象中的那樣!

Python不用Gui怎么實(shí)現(xiàn)圖形界面

對接 Flask

這是怎么回事呢?

根據(jù)提示來看,是因?yàn)檎也坏巾撁娴哪0逦募?/p>

我們在前面創(chuàng)建 Flask app 時,使用的是默認(rèn)的模板路徑,即 app.py 文件所在目錄的 templates 目錄,為啥打包之后就找不見了呢?

這是因?yàn)樵?windows 中,可執(zhí)行文件的運(yùn)行時,會被解壓到一個特定的目錄下,而我們的模板文件并沒有被打包進(jìn)入 exe 文件中,所以導(dǎo)致運(yùn)行時找不見模板文件。

完美呈現(xiàn)

如何解決這個問題呢?

作為不使用外部數(shù)據(jù)或文件的程序,只需要將程序本身打包就可以了,但大部分程序都需要外部數(shù)據(jù),比如我們的 Flask 應(yīng)用,就需要用到靜態(tài)文件等。

那么如何將它們打包進(jìn)可執(zhí)行文件呢?

只需要在打包時多加一個參數(shù)就可以了:

pyinstaller main.py -F -w --add-data "./templates/*;templates"

-- add-data 參數(shù)表示添加額外的數(shù)據(jù) -- ./templates/* 表示需要添加當(dāng)前目錄的 templates 目錄中的所有文件 -- ;為分隔符,其后的 templates 表示解壓是這些數(shù)據(jù)所在的目錄,這個目錄名必須和 創(chuàng)建 app 時 template_folder 參數(shù)一致 -- 如果需要用到靜態(tài)文件,需要額外添加,比如 --add-data "./static/*;static"

這樣就能將外部數(shù)據(jù)一起打包進(jìn)來了。

打包好后,雙擊執(zhí)行,就會發(fā)現(xiàn)網(wǎng)頁得以完美呈現(xiàn)了。

注意:

如果使用了虛擬環(huán)境,必須在虛擬環(huán)境中單獨(dú)安裝 pyinstaller,而不能用其他環(huán)境中已經(jīng)安裝好的,這是為了包裝打包是可以鏈接所以程序引用的模塊

因?yàn)?pyinstaller 打包時,找不到被引用的模塊時并不報錯,而打包好的程序可能會無法執(zhí)行。

關(guān)于“Python不用Gui怎么實(shí)現(xiàn)圖形界面”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Python不用Gui怎么實(shí)現(xiàn)圖形界面”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI