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

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

鳳翔ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

神器出場

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

建立虛擬環(huán)境[3] 或者在原來的 Web 項(xiàng)目環(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í)際項(xiàng)目的代碼,這里寫一個簡單的 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)在就可以將這個項(xiàng)目打包成 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 打包時,找不到被引用的模塊時并不報(bào)錯,而打包好的程序可能會無法執(zhí)行。

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

網(wǎng)站名稱:Python不用Gui怎么實(shí)現(xiàn)圖形界面
鏈接分享:http://bm7419.com/article30/jcigpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站自適應(yīng)網(wǎng)站、營銷型網(wǎng)站建設(shè)做網(wǎng)站、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管