PyInstaller是一款免費(fèi)易用的打包工具,支持Windows、Linux、MacOS,并且支持32位和64位系統(tǒng)。
http://www.pyinstaller.org/
PyInstaller安裝:pip install pyinstaller
十多年專注成都網(wǎng)站制作,成都定制網(wǎng)頁設(shè)計,個人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識、方案,網(wǎng)站設(shè)計流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)頁設(shè)計,高端網(wǎng)頁制作,對成都玻璃貼膜等多個方面,擁有多年的網(wǎng)站營銷經(jīng)驗(yàn)。
PyInstaller使用命令如下:pyinstaller yourprogram.py
PyInstaller使用時需切換至xxx.py文件所在目錄下。
常用可選項(xiàng)如下:
-F:打包后只生成單個可執(zhí)行文件
-D:默認(rèn)選項(xiàng),創(chuàng)建一個目錄,包含可執(zhí)行文件以及大量依賴文件
-c:默認(rèn)選項(xiàng),使用控制臺
-w:不使用控制臺
-p:添加搜索路徑,讓其找到對應(yīng)的庫
-i:改變生成程序的icon圖標(biāo)。
PyInstaller將Python解釋器和Python腳本打包成一個可執(zhí)行文件,并沒有編譯為機(jī)器碼。PyInstaller打包的可執(zhí)行文件不會提高運(yùn)行效率,而且可能會降低運(yùn)行效率。打包的優(yōu)勢是在運(yùn)行機(jī)器上不用安裝Python和Python腳本所依賴的庫。在Linux系統(tǒng)下,PyInstaller主要使用binutil工具包中的ldd和objdump命令。
PyInstaller會分析指定的Python腳本所依賴的其它依賴,然后進(jìn)行查找和復(fù)制,把所有的依賴都收集起來并進(jìn)行加密處理,包括Python解釋器,最后將文件打包到一個目錄或打包到可執(zhí)行文件中。
使用PyInstaller打包生成的可執(zhí)行文件,只能在和打包機(jī)器相同的環(huán)境下運(yùn)行,如果要在不同的操作系統(tǒng)上運(yùn)行,必須在新的操作系統(tǒng)環(huán)境上重新打包。
PyQt5使用QWebEngineView來展示HTML頁面,WebEngine是基于谷歌Chromium引擎開發(fā)的,PyQt5中可以使用PyQt5.QtWebKitWidgets.QWebEngineView來使用網(wǎng)頁控件。
QWebEngineView使用load(QUrl url)加載指定的URL定顯示,setHtml(QString &html)用于將網(wǎng)頁視圖的內(nèi)容設(shè)置為指定的HTML內(nèi)容。
QWebEngineView使用load加載一個Web頁面,實(shí)際是使用HTTP GET方法加載Web頁面。
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
class MainWindow(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.layout = QVBoxLayout()
self.browser = self.browser = QWebEngineView()
self.layout.addWidget(self.browser)
self.setLayout(self.layout)
self.browser.load(QUrl("http://www.51cto.com/"))
self.setWindowTitle("HuaWei Web")
self.setGeometry(5, 30, 1355, 730)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
class MainWindow(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.layout = QVBoxLayout()
self.browser = self.browser = QWebEngineView()
self.layout.addWidget(self.browser)
self.setLayout(self.layout)
self.browser.load(QUrl(r"/home/user/PyQt.html"))
self.setWindowTitle("Local HTML")
self.setGeometry(5, 30, 1355, 730)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
class MainWindow(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.layout = QVBoxLayout()
self.browser = self.browser = QWebEngineView()
self.layout.addWidget(self.browser)
self.setLayout(self.layout)
self.browser.setHtml('''
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PyQt5</title>
</head>
<body>
<h2>hello PyQt5</h2>
<h3>hello PyQt5<h3>
</body>
</html>
''')
self.setWindowTitle("Local HTML")
self.setGeometry(5, 30, 1355, 730)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
通過QWebEnginePage的runJavaScript(str, callable)可以方便地實(shí)現(xiàn)PyQt5和HTMP/JavaScript的雙向通信,實(shí)現(xiàn)了Python代碼和HTMP/JavaScript代碼的解耦,便于開發(fā)人員進(jìn)行分工協(xié)作,
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
from PyQt5.QtWebEngineWidgets import QWebEngineView
import sys
html = '''
<html>
<head>
<title>A Demo Page</title>
<script language="javascript">
// Completes the full-name control and
// shows the submit button
function completeAndReturnName() {
var fname = document.getElementById('fname').value;
var lname = document.getElementById('lname').value;
var full = fname + ' ' + lname;
document.getElementById('fullname').value = full;
document.getElementById('submit-btn').style.display = 'block';
return full;
}
</script>
</head>
<body>
<form>
<label for="fname">First name:</label>
<input type="text" name="fname" id="fname"></input>
<br />
<label for="lname">Last name:</label>
<input type="text" name="lname" id="lname"></input>
<br />
<label for="fullname">Full name:</label>
<input disabled type="text" name="fullname" id="fullname"></input>
<br />
<input type="submit" id="submit-btn"></input>
</form>
</body>
</html>
'''
class MainWindow(QWidget):
def __init__(self,parent=None):
super(MainWindow, self).__init__(parent)
self.result = None
self.layout = QVBoxLayout()
self.webView = QWebEngineView()
self.webView.setHtml(html)
self.layout.addWidget(self.webView)
button = QPushButton('設(shè)置全名')
self.layout.addWidget(button)
self.setLayout(self.layout)
self.resize(400, 200)
self.setWindowTitle("PyQt JS")
button.clicked.connect(self.complete_name)
def complete_name(self):
self.webView.page().runJavaScript('completeAndReturnName();', self.js_callback)
def js_callback(self, result):
self.result = result
print(result)
if __name__ == "__main__":
# 創(chuàng)建一個 application實(shí)例
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
JavaScript調(diào)用PyQt代碼是指PyQt可以與加載的Web頁面進(jìn)行雙向的數(shù)據(jù)交互。首先,使用QWebEngineView對象加載Web頁面后可以獲得頁面中表單輸入數(shù)據(jù),在Web頁面中通過JavaScript代碼收集用戶提交的數(shù)據(jù)。然后,在Web頁面中,JavaScript通過橋連接方式傳遞數(shù)據(jù)給PyQt。PyQt接收到Web傳遞的數(shù)據(jù),經(jīng)過業(yè)務(wù)處理后,把處理過后的數(shù)據(jù)返回給Web頁面。
(1)創(chuàng)建QWebChannel對象
創(chuàng)建QWebChannel對象,注冊一個需要橋接的對象,以便Web頁面的JavaScript使用。
channel = QWebChannel()
obj = ClassName()
channel.registerObject("bridge", obj)
view.page().setWebChannel(channel)
(2)創(chuàng)建共享數(shù)據(jù)的PyQt對象
創(chuàng)建的共享對象需要繼承自QWidget或QObject。
from PyQt5.QtCore import QObject
from PyQt5.QtCore import pyqtProperty
from PyQt5.QtWidgets import QWidget, QMessageBox
class SharedObject(QWidget):
def __init__(self):
super(SharedObject, self).__init__()
def _getStrValue(self):
#
return '100'
def _setStrValue(self, str):
# get web parameter
print("web parameter: ", str)
# 需要定義對外發(fā)布的方法
strValue = pyqtProperty(str, fget=_g
```etStrValue, fset=_setStrValue)
(3)創(chuàng)建調(diào)用PyQt的Web頁面
在Web頁面訪問PyQt中注冊的對象,獲得channel.objects.bridge共享對象,bridge是在PyQt中注冊共享對象時指定的名稱,核心代碼如下:
document.addEventListener("DOMContentLoaded", function()
{
new QWebChannel(qt.webChannelTransport, function(channel){
window.bridge = channel.objects.bridge;
alert('bridge=' + bridge + '\n從pyqt傳來的參數(shù)=' + window.bridge.strValue);
});
});
新聞標(biāo)題:PyQt5快速入門(七)PyQt5擴(kuò)展
瀏覽路徑:http://chinadenli.net/article6/gigsog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、網(wǎng)站營銷、微信公眾號、做網(wǎng)站、自適應(yīng)網(wǎng)站、ChatGPT
聲明:本網(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)