PyQt5クイックスタート(7)PyQt5延長
、PyQt5プロジェクトリリース
1、pyInstallerのプロフィール
pyInstallerのは、自由に使用できるパッケージングツール、WindowsやLinux、MacOSのためのサポートで、32ビットおよび64ビットシステムをサポートしています。
http://www.pyinstaller.org/
pyInstallerのインストール:pip install pyinstaller
2、pyInstallerの使用
pyInstallerのコマンドを使用して、次のとおりです。pyinstaller yourprogram.py
pyInstallerのは、使用されるファイルのディレクトリxxx.pyに切り替える必要があります。
:一般的なオプションは次のとおりです
梱包は、単一の実行ファイルを生成した後:-F
-Dを:デフォルトのオプションは、実行可能ファイルを含むディレクトリを作成し、ファイルに大きく依存している
-c:デフォルトのオプションは、コンソールを使用
-wを:コンソールを使用していません
-p:それは対応するライブラリ見つけてみましょう、検索パスを追加
変更アイコンアイコン生成プログラム:-iを。
3、pyInstallerの原則
pyInstallerのPythonインタプリタと単一の実行可能ファイルにパッケージ化Pythonスクリプトではなく、マシンコードにコンパイル。pyInstallerのパックの実行可能ファイルは、運用効率を改善しないと、作業効率を低下させる可能性があります。利点は、Pythonをインストールすることなく、機械の操作にパッケージされており、Pythonスクリプトは、ライブラリに依存しています。Linuxシステムでは、pyInstallerのは、主にキットのLDDとobjdumpのコマンドbinutil使用します。
pyInstallerのは、Pythonスクリプトは、他の依存に依存して、その後、見つけてコピー指定された、すべての依存関係が収集され、暗号化され、Pythonインタプリタを含め、最終的にディレクトリにファイルをパッケージ化または実行可能ファイルにパックされている分析します。
あなたは、異なるオペレーティングシステム上で実行する場合は、必ず同じ環境とパッケージングマシンで実行することができ、実行ファイル生成pyInstallerのパッケージを使用して、新しいオペレーティング・システム環境に再パッケージ化する必要があります。
第二に、インタラクティブなWebページ
1、QWebEngineViewプロフィール
PyQt5は、HTMLページを表示するためにQWebEngineViewを使用し、WebEngineは、Googleクロムエンジンの開発に基づいており、PyQt5は、Webコントロールを使用するためにPyQt5.QtWebKitWidgets.QWebEngineViewを使用することができます。
QWebEngineView表示与えられた指定されたURLをロードするために、負荷(QUrlのURL)を使用して、setHtml(QStringの&HTML)が指定されたHTMLコンテンツにコンテンツページを表示するために使用されます。
Webページをロードするためにロードを使用QWebEngineView、実際のWebページは、HTTPのGETメソッドを使用してロードされます。
2、外部ディスプレイの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_())
3、ローカルの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(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_())
図4に示すように、負荷及び表示埋め込まれたHTMLコード
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>
<h1>hello PyQt5</h1>
<h2>hello PyQt5<h2>
</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_())
5、PyQt5は、JavaScriptのコードを呼び出します
便利な、Pythonのコードを達成するためにQWebEnginePage runJavaScript(STR、呼び出し可能)PyQt5と双方向通信HTMP / JavaScriptを、によって達成と労働の分割を容易にするために、HTMP / JavaScriptコードの開発を分離することができます
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 style="display: none;" 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('设置全名')
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__":
# 创建一个 application实例
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
6、PyQt5を呼び出すJavaScriptコード
PyQtはPyQtはコールを参照するJavaScriptコードがロードされたWebページとの双方向のデータ交換することができます。まず、WebページをロードするQWebEngineViewオブジェクトを使用すると、ページのフォーム入力データを得ることができ、Webページにユーザーが送信したJavaScriptコードを介してデータを収集します。次に、Webページでは、JavaScriptのデータはPyQtはへのブリッジ接続を介して送信されます。PyQtは、サービス処理の後、処理後のデータは、Webページに返され、Webデータの転送を受けました。
(1)QWebChannelオブジェクトの作成
はJavaScriptを使用してWebページにオブジェクトを橋渡しする必要性を登録、QWebChannelオブジェクトを作成します。
= QWebChannelチャネル()
OBJ =クラス名()
channel.registerObject( "橋"、OBJ)
view.page()。setWebChannel(チャンネル)
(2)PyQtは共有データ・オブジェクトを作成するには、
共有オブジェクトは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)
# 需要定义对外发布的方法
strValue = pyqtProperty(str, fget=_g
```etStrValue, fset=_setStrValue)
(3)创建调用PyQt的Web页面
在Web页面访问PyQt中注册的对象,获得channel.objects.bridge共享对象,bridge是在PyQt中注册共享对象时指定的名称,核心代码如下:
document.addEventListener( "DOMContentLoaded"、関数()
{
new QWebChannel(qt.webChannelTransport, function(channel){
window.bridge = channel.objects.bridge;
alert('bridge=' + bridge + '\n从pyqt传来的参数=' + window.bridge.strValue);
});
});