PyQt5クイックスタート(7)PyQt5延長

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);
});

});

おすすめ

転載: blog.51cto.com/9291927/2424319