您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python不用Gui怎么實現圖形界面的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Python不用Gui怎么實現圖形界面文章都會有所收獲,下面我們一起來看看吧。
Web 程序是用 Flask 開發的,所以需要安裝 Python 的 Pywebview 作為打包工具。
建立虛擬環境[3] 或者在原來的 Web 項目環境中,執行:
pip install pywebview
在 Windows 系統中,需要 .Net 4.0 以上
小試牛刀:
import webview window = webview.create_window('Hello!', 'http://http://www.justdopython.com') webview.start()
引用 webview 庫
啟動一個窗口,設置標題為 Hello!,指定頁面地址
啟動 webview
就能看到如下的效果:
小試牛刀
神奇吧!
Pywebview 支持三種模式,簡單模式,服務器模式 和 線程模式。
簡單模式 就相當于一個定制流瀏覽器,指定一個地址,就可以實現瀏覽了,如上面的例子。
服務器模式 相當于包裝了一個 Web 應用,就是會啟動一個本地服務器,在定制的瀏覽器中瀏覽。
線程模式 比較高級,就是需要自己手動維護線程狀態,實現更高級的玩法。
對于現在的需求,我們選擇服務器模式,即包裝本地的一個 Web 應用。
服務器模式會為我們提供一個 HTTP Server,只要把 Web 應用部署上去就好了。
因為無非展示實際項目的代碼,這里寫一個簡單的 Flask 應用:
關于 Flask Web 應用開發,可以參考筆者之前寫的 Flask 文章
創建一個 app.py 文件:
from flask import Flask, render_template, jsonify, request app = Flask(__name__) # 創建一個應用 @app.route('/') def index():# 定義根目錄處理器 return render_template('index.html') @app.route('/detail') def detail(): return render_template('detail.html') if __name__ == '__main__': app.run() # 啟動服務
這個應用很簡單,只有兩個頁面,分別通過 / 和 /detail 來訪問。
如果運營這段代碼,就會啟動一個 Flask 應用,通過 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
引入 剛才創建的 app
創建一個 webview window,并將 app 作為 url 參數傳入
然后啟動 webview 就可以了
這里的關鍵是,將 Flask 應用作為 url 參數,Webview 發現傳入的參數是 flask 應用,就會啟動服務模式。
運行程序后,可以看到和在瀏覽器中的效果一樣的:
對接 Flask
現在就可以將這個項目打包成 exe 了。
首先需要安裝 pyinstaller[4]
pip install pyinstaller
然后進入程序目錄執行:
pyinstall -F -w main.py
F 參數表示將程序打包成一個可執行文件,不加這個參數就會打包成一個文件夾夾
w 參數表示執行打包好的可執行程序時,不顯示命令行窗口,這個特性只有在 Windows 系統中有
很快在程序目錄下,就會生成一個 dist 文件夾,其中就會有個 main.exe 可執行文件,這就是打包好的結果。
雙擊運行,可以看到效果……
等等,好像并不是想象中的那樣!
對接 Flask
這是怎么回事呢?
根據提示來看,是因為找不到頁面的模板文件。
我們在前面創建 Flask app 時,使用的是默認的模板路徑,即 app.py 文件所在目錄的 templates 目錄,為啥打包之后就找不見了呢?
這是因為在 windows 中,可執行文件的運行時,會被解壓到一個特定的目錄下,而我們的模板文件并沒有被打包進入 exe 文件中,所以導致運行時找不見模板文件。
如何解決這個問題呢?
作為不使用外部數據或文件的程序,只需要將程序本身打包就可以了,但大部分程序都需要外部數據,比如我們的 Flask 應用,就需要用到靜態文件等。
那么如何將它們打包進可執行文件呢?
只需要在打包時多加一個參數就可以了:
pyinstaller main.py -F -w --add-data "./templates/*;templates"
-- add-data 參數表示添加額外的數據 -- ./templates/* 表示需要添加當前目錄的 templates 目錄中的所有文件 -- ;為分隔符,其后的 templates 表示解壓是這些數據所在的目錄,這個目錄名必須和 創建 app 時 template_folder 參數一致 -- 如果需要用到靜態文件,需要額外添加,比如 --add-data "./static/*;static"
這樣就能將外部數據一起打包進來了。
打包好后,雙擊執行,就會發現網頁得以完美呈現了。
如果使用了虛擬環境,必須在虛擬環境中單獨安裝 pyinstaller,而不能用其他環境中已經安裝好的,這是為了包裝打包是可以鏈接所以程序引用的模塊
因為 pyinstaller 打包時,找不到被引用的模塊時并不報錯,而打包好的程序可能會無法執行。
關于“Python不用Gui怎么實現圖形界面”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Python不用Gui怎么實現圖形界面”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。