GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

r0x0r

pywebview – 独自の専用ウィンドウにHTMLコンテンツを表示することができるwebviewコンポーネントを中心とした軽量なクロスプラットフォームネイテ..

投稿日:

独自の専用ウィンドウにHTMLコンテンツを表示することができるwebviewコンポーネントを中心とした軽量なクロスプラットフォームネイティブラッパー

pywebviewは、独自のネイティブGUIウィンドウにHTMLコンテンツを表示することができるwebviewコンポーネントを中心とした、軽量のクロスプラットフォームラッパーです。 これは、GUIがブラウザベースであるという事実を隠し、デスクトップアプリケーションのWeb技術の力を提供します。 pywebviewは、 FlaskBottleのような軽量のWebフレームワーク、またはPythonとDOMの間の双方向ブリッジを使用して単独で使用できます。

pywebviewは、Windows上のWinForms、Mac OSX上のCocoa、Linux上のQt4 / 5またはGTK3というWebコンポーネントウィンドウを作成するためのネイティブGUIを使用します。 アプリケーションをフリーズすることを選択した場合、pywebviewはGUIの大きなツールキットまたはWebレンダラーをバンドルして実行可能なサイズを小さく保ちません。 Python 2と3の両方に対応しています。Androidはサポートされていませんが、 Python for Androidのようなソリューションでは同じコードベースを使用してAPKを作成できます。

BSDライセンスの下でライセンスされています。 ローマのSirokovShiva Prasadが維持しています。

ギャラリー

pywebviewで作成したアプリ。 pywebviewを使用してアプリケーションを構築している場合は、躊躇しないでください。

インストール

依存関係がインストールされている場合は、次のようにします。

pip install pywebview

ご使用のプラットフォーム用のPython依存関係を自動的に取得してインストールするには、適切な“install extras”を使用してインストールします。

(同じコードがインストールされていることに注意してください;以下のライブラリが複数ある場合は、このreadmeファイルに記載されている順序で試してみてください)。

Windows( pythonnet WinFormsをpythonnet ):

pip install pywebview[winforms]

Mac( pyobjc経由でCocoa WebKitウィジェットをpyobjc ):

pip install pywebview[cocoa]

Linux(PyGObject経由でPyGObjectを使用):

pip install pywebview[gtk3]

Qt 5を搭載したLinuxまたはMacの場合:

pip install pywebview[qt5]  # Qt5 with PyQt5

pywebviewをPyQt4で使用するには、pypiで利用できないため、別途インストールする必要があります。

pywin32comtypesを使用したWindows用の2番目の実装も利用可能です:

pip install pywebview[win32]

依存関係

Windows

Windowsでは、Win32とWindowsフォームの実装を選択できます。 Win32の実装は積極的に開発されておらず、一部の機能が欠けています。

Windowsフォームの場合pythonnet

Win32 pywin32comtypescomtypesが必要comtypes Python 2のActiveStateディストリビューションにはpywin32がプリインストールされています

OS X

pyobjc PyObjCは、PythonがOS Xにバンドルされています。スタンドアロンのPythonインストールでは、別途インストールする必要があります。

Linux

GTK3ベースのシステムの場合: PyGObject Debianベースのシステムでsudo apt-get install python-gi gir1.2-webkit-3.0

QTベースのシステムの場合

PyQt5またはPyQt4いずれか。 PyQt4は廃止され、今後削除される予定です。

使用法

import webview
webview.create_window("It works, Jim!", "http://www.flowrl.com")

詳細な使用方法については、 examplesディレクトリの例を参照してください。 アプリを構築するには3つの方法があります

  1. 上記の例のようにWebページを開きます。 このページは、ローカル( file:// )またはリモートのいずれかになります。 file://を使用file://と、アプリケーションがフリーズしても機能しません
  2. 相対URLを使用してアプリケーションをロードし、Python-JS相互通信用のjs_apiオブジェクトを提供します。 URLは、フリーズされた環境でも動作するように自動的に解決されます。 examples/todos参照してください。
  3. ローカルWebサーバーを実行し、pywebviewをポイントして表示します。 examples/flask_appディレクトリにFlaskアプリケーションのサンプルがあります。

API

  • webview.create_window(title, url='', js_api=None, width=800, height=600, resizable=True, fullscreen=False, min_size=(200, 100)), strings={}, confirm_quit=False, background_color='#FFF', debug=False, text_select=False)

    新しいWebViewウィンドウを作成します。 この関数を初めて呼び出すと、アプリケーションが起動し、プログラムの実行がブロックされます。 別のスレッドでプログラムロジックを実行する必要があります。 後続の呼び出しは、作成されたウィンドウのユニークなuidを返します。これは、API関数内の特定のウィンドウを参照するために使用できます(単一ウィンドウアプリケーションは、 uidについて気にする必要はなく、関数呼び出しから単純に省略できます。

    • title – ウィンドウのタイトル
    • url – 読み込むURL。 URLにプロトコルプレフィックスがない場合は、アプリケーションのエントリポイントからの相対パスとして解決されます。
    • js_apijs_apiを現在のWebViewウィンドウのDOMにjs_apiします。 js_api呼び出し可能な関数は、 window.pywebview.apiオブジェクトを介してJavascriptページを使用して実行できます。 カスタム関数は、プリミティブ型またはオブジェクトのいずれかの1つのパラメータを受け入れます。 オブジェクトはPython側でdictに変換されます。 関数は別々のスレッドで実行され、スレッドセーフではありません。
    • width – ウィンドウの幅。 デフォルトは800ピクセルです。
    • height – ウィンドウの高さ デフォルトは600ピクセルです。
    • resizable – ウィンドウのサイズを変更できるかどうか デフォルトはTrueです
    • fullscreen – フルスクリーンモードで起動するかどうかを指定します。 デフォルトはFalseです。
    • min_size – 最小のウィンドウサイズを指定する(幅、高さ)タプル。 デフォルトは200×100です
    • strings – ローカライズされた文字列を持つ辞書。 デフォルトの文字列とそのキーはlocalization.pyで定義されています
    • confirm_quit – 終了確認ダイアログを表示するかどうかを指定します。 デフォルトはFalseです。
    • background_color – WebViewがロードされる前に表示されるウィンドウの背景色。 六角の色で指定します。 デフォルトは白です。
    • debug – デバッグモードを有効にします。 OSX、GTK、QTには本格的なWebインスペクタがあり、WinFormsには初歩的なエラー報告があります。 Webインスペクタをアクティブにするには、ページを右クリックして、Inspectを選択します。
    • text_select – ドキュメントのテキスト選択を有効にします。 デフォルトはFalseです。 要素ごとにテキスト選択を制御するには、 user-selectプロパティを使用ます。

以下のこれらの関数は、少なくとも1つのWebViewウィンドウがcreate_window()作成された後に呼び出す必要があります。 それ以外の場合は例外がスローされます。 すべての場合、 uidcreate_window()によって返されるターゲットウィンドウのuidです。 指定されたuid持つウィンドウが存在しない場合、例外がスローされます。 デフォルトは'master'で、最初のウィンドウに与えられた特別なuidです。

  • webview.set_title(title, uid='master')ウィンドウのタイトルを変更します。

  • webview.load_url(url, uid='master')指定したWebViewウィンドウに新しいURLをロードします。

  • webview.load_html(content, base_uri=base_uri(), uid='master')指定されたWebViewウィンドウにHTMLコンテンツを読み込みます。 相対URLを解決するためのベースURLは、プログラムが起動されるディレクトリに設定されます。 HTMLがこのように読み込まれるとき、あなたはhashbangアンカーを使うことができないことに注意してください。

  • webview.load_css(css, uid='master')指定されたWebViewウィンドウにCSSを読み込みます。

  • webview.evaluate_js(script, uid='master')指定されたウィンドウでJavascriptコードを実行します。 最後に評価された式が返されます。 JavaScriptの型は、Pythonの型に変換されます。 dictsするJSオブジェクト、リストへの配列、未定義。 実装上の制限により、文字列 ‘null’はNoneに評価されることに注意してください。

  • webview.get_current_url(uid='master')指定されたウィンドウで現在ロードされているURLを返します。 URLがロードされていない場合は何もありません。

  • webview.toggle_fullscreen(uid='master')アクティブモニタ上のウィンドウの全画面モードを切り替えます。

  • webview.create_file_dialog(dialog_type=OPEN_DIALOG, directory='', allow_multiple=False, save_filename='', file_types=())

    開いているファイル( webview.OPEN_DIALOG )、フォルダを開く( webview.OPEN_DIALOG )、ファイルを保存する( webview.SAVE_DIALOG )ダイアログ。 選択したファイルのタプルを返します。取り消された場合はNoneを返します。

    • allow_multiple=Trueは複数の選択を可能にします。
    • directory初期ディレクトリ。
    • save_filenameファイル保存ダイアログのデフォルトのファイル名。
    • file_types開いているファイルダイアログでサポートされているファイルタイプ文字列のタプル。 ファイルタイプ文字列は、 "Description (*.ext1;*.ext2...)"形式に従わなければなりません。 引数が指定されていない場合は、デフォルトで"All files (*.*)"マスクが使用されます。 ‘All files’文字列は、ローカリゼーション辞書で変更することができます。
  • webview.destroy_window(uid='master')指定されたWebViewウィンドウを破棄します。

  • webview.window_exists(uid='master')指定されたuidを持つWebViewウィンドウが起動していればTrueを返し、そうでない場合はFalseを返します。

テスト

pywebviewはテストのためにpytestを使用します。 テストを実行するには、プロジェクトのルートディレクトリにpytest testsと入力します。 テストでは、些細な間違い、構文エラー、例外などしかカバーしません。つまり、機能テストはありません。 各テストでは、異なるシナリオで実行されたときにpywebviewウィンドウを開いたり閉じたりできることを確認します。

どのWebレンダラーが使用されていますか?

OS XとLinuxシステムでは、WebKitを入手します。 実際のバージョンは、LinuxのOS XおよびQT / GTKにインストールされているSafariのバージョンによって異なります。

Windowsの場合は、MSHTML(Trident)が栄光に満ちています。 バージョンは、Internet Explorerのインストールされているバージョンによって異なります。 Windows XPシステムでは、IE8より優れたものは得られません。 Vistaの場合、IE9に限ります。 Windows 7/8/10では、最新のインストール済みバージョンが取得されます。 MicrosoftがEdgeHTMLエンジンを埋め込むことはできません。

アプリケーションをフリーズするにはどうすればよいですか?

OS Xではpy2app、Windowsではpyinstallerを使用してください。 リファレンスsetup.pyファイルについては、 examples/py2app_setup.py参照してexamples/py2app_setup.py Pyinstallerはすぐに実行可能な実行可能ファイルをビルドしますが、組み込みのpyinstallerフックを提供することで、ターゲットディレクトリにPython.Runtime.dll(Pythonnetの).NETアセンブリを含める必要があります。 このclrフックを使う正しい方法は、コマンドラインから–hidden-import = clrを指定するか、specファイル内でhiddenimports = [‘clr’]を指定することです。 これは、Python.Runtime.DLL Windows用の隠しインポートを見つけるのを助ける必要があります。

VirtualEnvの問題

OS Xのvirtualenvでは、pywebviewで作成されたウィンドウにキーボードフォーカスとCmd + Tabに関する問題があります。 この現象は、virtualenvに付属のPythonインタプリタによって発生します。 この問題を解決するには、 your_venv/bin/pythonをシステム上のPythonインタプリタで上書きする必要があります。 代わりに、 ここで説明するように別のPythonインタプリタを使用するように仮想環境を設定することもできます。







-r0x0r
-, , , , , , , , , , , ,

執筆者: